몇일동안 고심하고
프로파일링하고
열심히 최적화를 하여서!!!
lighttp보다 1000배 느리던 talkson을
lighttp보다 2배 빠르게 만들어버렸다;;;;
이제 좀 뿌듯하다 ㅋ
2000배의 성능개선이라고 봐야하나? (으쓱)
문제는
ThreadPool에 의해 관리되는 Worker Thread들이
매번 새로운 task를 받을 때 마다
어느 한 worker-thread 객체에 pthread_cond_signal()을 호출해서 깨우고
그놈이 일을 배당받은 일을 마친 후에는
pthread_cond_wait()를 호출해서 다시 block모드로 보내는것이 문제였다.
뭐..자세한 얘기는
OS와 kernel의 process-scheduler 얘기를 해야하니깐 생략;;
해결책은 pthread_mutex와 pthread_cond 없이
lock-free algorithm으로 구현했는데
2000배의 성능 차이가 ㅋㅋㅋㅋ
암튼 기쁘다..
하지만, 내가 구현한 이 lock-free algorithm에 어딘가 문제가 있어서
가끔씩 task queue에 들어있는 객체를 날려먹는다.
대충..
40개의 동시접속을 이용해
총 10000개의 HTTP요청을 talkson에게 보내면
가끔씩, 9998~9999까지 처리하고, 1~2개를 날려먹는다.
뚫어지라 코드를 훝어봐도 뾰족한수가 안보이네..
lock-free algorithm의 단점은..
그놈이 정말 thread-safe한지 증명하기가 참 힘들다..ㅡㅡ;;;
Recent comments
9 weeks 6 days ago