2011년 3월 28일 월요일

using skip list, mulithreaded heap , event polling in tinyNetworkLib

tinyNetworkLib를 코딩중입니다.

몇가지 중요한 결정을 하였습니다.

skip list를 사용하여, dispatched packet에 대한 circular buffer의 index를 보관하고, socket으로부터 recv시 overwrite하지 않도록 보호하는데 쓰기로 했습니다.
(좀 어려운 말인데요;;)
recv시, circular buffer에서 안전한 영역, 즉, 아직 처리 되지 않은 packet이 있지 않은 영역을 확보하기 위해서, circular buffer의 next buffer pointer보다 크고, dispatched packet index중에서 가장 작은 수를 알아내기 위해서 skip list를 사용합니다. logN time이죠.

이의 용도에 맞게 최적화 된 Skip List 를 구현할 수도 있지만,
잘 구현된 것을 일단 사용하기로 했습니다. ( http://bit.ly/gGtzuO )

또한, multi thread 환경에서는, 여러개의 thread가 heap을 경쟁합니다. 하나의 thread에서 alloc한 것을 다른 thread에서 free해야 하는 상황이 자주 생깁니다. 그럴 경우, 어쩔 수 없이 lock을 써야 하는데, thread가 많아질 수록 scalability 가 떨어지는 문제가 생깁니다.
이 문제를 해결하기 위해서, 역시 직접 구현하는 것이 맞겠지만...;; Intel TBB의 scalable allocator를 사용하기로 결정하였습니다.

또한, epoll이나 kqueue의 경우, IOCP의 그 역할(? ^^)이 없습니다만,
network thread에서 poll을 해오고, 처리는 event마다 thread pool로 던지는 역할을 위해서, 역시 intel TBB의 task를 쓰기로 했습니다. ^^

God bless me and you. ^^

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^