看板Programming
标 题Re: [问题] thread and select
发信站HiNetNews (Wed Apr 30 17:43:29 2008)
转信站ptt!ctu-reader!ctu-gate!news.nctu!newsfeed.berkeley.edu!ucberkeley!new
现在应该是使用libev , libevent 已是旧东西,另外 poll/select
也可以使用none-blocking 的模式撰写,而none-blocking的撰
写应该是比blocking 要注意更多的东西
fork 无法拿来处理大量连线...
"悸动" <
[email protected]> 撰写於邮件新闻:
[email protected]...
>※ 引述《
[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