Re: [問題] thread and select
現在應該是使用libev , libevent 已是舊東西,另外 poll/select
也可以使用none-blocking 的模式撰寫,而none-blocking的撰
寫應該是比blocking 要注意更多的東西
fork 無法拿來處理大量連線...
"悸動" <DarkKiller.bbs@Deer.twbbs.org> 撰寫於郵件新聞:4ZeSc6$eGI@Deer.twbbs.org...
>※ 引述《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
討論串 (同標題文章)