Re: [問題] thread and select
※ 引述《littleboypis.bbs@ptt.cc (littleboypis)》之銘言:
> 我在想,用pthread的方式 和 用file-descriptor的方式
> 有什麼差異呢?在效能上有沒有誰好誰壞?
這些都是依照需要發展出來的,有一篇常被提出來的文章是 C10K:
http://www.kegel.com/c10k.html
至於「誰好誰壞」,這是 flame war 等級的問題...
select()/poll() 是用迴圈判斷哪個連線有動作,所以當連線數量大的時候效
率會比較差,但這個方法是最古老的方法,所以可移植性最好。
另外在程式的撰寫上,要注意到 blocking I/O 卡住,所以並不是很好寫。
Threading 是每個 thread 自己處理連線,所以不用管 blocking 的問題,但
每個 thread 有一個 stack 的 overhead,這個要看你自己如何抉擇。
程式的撰寫上,Multithreading 本身有些要注意的地方,像是資料結構可能要
用 mutex 保護,另外用 thread 時要注意到 library 是不是 thread-safe,
不是的話也要用 mutex 保護。
Threading 另外的好處是可以很輕鬆的用到多顆 CPU。
Event (epoll()/kqueue()) 是在連線有動作的時候直接告訴你是哪個連線,而
不用迴圈判斷,所以效能上比起 select()/poll() 好,但本來 blocking I/O
的問題還是要自己處理。
select()/poll()/Event 的部份可以用 libevent 幫你做,上面的問題都有一
些已經寫好的工具可以讓你比較輕鬆解決。
一般為了效率常見的作法是用 Event-based + fork()。
--
Resistance is futile.
http://blog.gslin.org/ & <gslin@gslin.org>
--
※ Origin: 邪惡小鹿鹿 <Deer.twbbs.org> ◆ From: 140.113.17.29
討論串 (同標題文章)