thread poll 을 이용해서 간단한 웹서버를 구현할 때 질문입니다.

trymp의 이미지


CentOS 에서 8개의 CPU core 를 가지고 웹서버를 구현할 때,

웹서버를 개발하려고 하는데요. 간단한 것임.

1000개 정도의 thread pool 을 만들고 sleep 상태로 만든 다음,

main thread 에서 accept 받아서 소켓을 작업 thread 에 할당하고

깨워서 일을 시키는 방식입니다.

잠재우고 깨우는 것은 mutex 를 가지고 할 생각입니다.

이때 깨워서 일 시킬 때, 접속이 많은 상태라면

깨우더라도 스케쥴러로 부터 time slice 를 늦게 할당 받아

제시간에 작업을 처리 못할까 하는 걱정입니다.

그냥 1 대 1 PC 에서는 많은 접속을 수행해 보았는데요.

실제로 많은 접속이 있는 경우 thread 가 제때 작업을 처리 못해서

timeout 이 나지 않을까 의문입니다.

고수님들의 의견 부탁드립니다.

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

8 core 에 1000 여개의 thread 를 생성하면은 부담이 되지 않을까요? 아무리 thread 가 process 보다는 가볍다고는 하지만 thread 개수가 너무 많은것이 아닌가 예상됩니다.

8 core 의 경우 동시에 최대 8개가 돌아갈수 있을것이고 I/O 와 같은 context switching 되는 환경을 생각한다면 1.5 ~ 2배정도의 쓰레드가 적당할것 같습니다. (이부분은 workload 에 영향을 많이 받으니 벤치마크를 통해서 적절한 수의 thread 를 찾으셔야할것 같습니다.)

apache bench 와 같은 것을 이용해서 1K 부터 10K 이상의 connection 에 따른 throughput 및 latency 를 측정하면서 적정수준의 thread 를 찾아 보시기 바라겠습니다.

덧붙여 http://en.wikipedia.org/wiki/C10k_problemhttp://www.kegel.com/c10k.html 를 한번 보시면 많은 도움이 될것 같습니다.