coroutine으로 구조를 변경 : 조심해서 사용하면 좋긴하지만 사용하기 조금(?) 불편한 한계가 있습니다.
libevent로 구조를 변경 : IO 위주의 프로세싱이라면 강추지만, 복잡한 로직이라면 비추
state thread로 대체 : 제공하는 IO 함수나 양보 함수들을 사용해야만 스위칭이 됩니다.
GNU pth로 대체 : 정확도와 편리함은 좋지만 성능면에서는 (쓰레드가 많다면) 프로파일링 한번 해보셔야 할 겁니다.
그런데 스택이 깨진다는 것이 정확하게 어떤 말씀인가요? 쓰레드마다 로컬 변수를 많이 쓴다는 것인가요? 동적으로 메모리 관리를 하신다면 스택이 깨진다(?)는 일은 없을텐데요. 혹시 쓰레드 사이의 메모리 공유 문제는 아니었나요?
coroutine으로 구조를
coroutine으로 구조를 변경 : 조심해서 사용하면 좋긴하지만 사용하기 조금(?) 불편한 한계가 있습니다.
libevent로 구조를 변경 : IO 위주의 프로세싱이라면 강추지만, 복잡한 로직이라면 비추
state thread로 대체 : 제공하는 IO 함수나 양보 함수들을 사용해야만 스위칭이 됩니다.
GNU pth로 대체 : 정확도와 편리함은 좋지만 성능면에서는 (쓰레드가 많다면) 프로파일링 한번 해보셔야 할 겁니다.
그런데 스택이 깨진다는 것이 정확하게 어떤 말씀인가요? 쓰레드마다 로컬 변수를 많이 쓴다는 것인가요? 동적으로 메모리 관리를 하신다면 스택이 깨진다(?)는 일은 없을텐데요. 혹시 쓰레드 사이의 메모리 공유 문제는 아니었나요?
...
어떤 상황인지는 잘 모르겠습니다만, 쓰레드를 많이 생성해서 메모리가 모자라다면 pthread가 아닌 뭘 사용해도 모자라긴 마찬가지일 겁니다. 다른 라이브러리를 사용한다고 쓰레드가 사용하던 스택이 어디로 가는 게 아니니까요.
* 메모리가 아닌 다른 리소스 문제라면 차이가 있을지도...
음 스택 사용량을
음 스택 사용량을 줄이는 게 가장 쉽지 않을까요?
http://www.kegel.com/stackcheck/
지금은 어떤지 모르겠는데 예전엔 다이나믹 링커가 쓰레드 스택에서 돌면서 스택을 많이 사용했습니다. 가드 페이지 켜고 누가 스택 많이 쓰는지 확인해보세요. 어느정도까진 줄이기 그렇게 어렵지 않습니다.
댓글 달기