Re: [問題] thread and select

看板Programming作者時間17年前 (2008/04/30 10:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
現在應該是使用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
文章代碼(AID): #185zBU00 (Programming)
文章代碼(AID): #185zBU00 (Programming)