看板Programming
标 题Re: [问题] thread and select
发信站小鹿鹿 BBS (Wed Apr 30 04:20:54 2008)
转信站ptt!ctu-reader!news.nctu!abpe.org
※ 引述《[email protected] (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/ & <
[email protected]>
--
※ Origin: 邪恶小鹿鹿 <Deer.twbbs.org> ◆ From: 140.113.17.29