Re: [問題] thread and select

看板Programming作者時間17年前 (2008/04/30 04:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《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): #185uN200 (Programming)
文章代碼(AID): #185uN200 (Programming)