事件循环与多线程阻塞 IO [英] Event Loop vs Multithread blocking IO
本文介绍了事件循环与多线程阻塞 IO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在阅读有关服务器架构的评论.
I was reading a comment about server architecture.
http://news.ycombinator.com/item?id=520077
在此评论中,此人说了三件事:
In this comment, the person says 3 things:
- 事件循环一次又一次地被证明在大量低活动连接中真正发挥作用.
- 相比之下,与事件循环相比,具有线程或进程的阻塞 IO 模型已经一次又一次地展示了减少每个请求的延迟.
- 在负载较轻的系统上,差异是无法区分的.在负载下,大多数事件循环选择放慢速度,大多数阻塞模型选择卸载.
这些是真的吗?
还有另一篇题为为什么事件是一个坏主意(对于高并发服务器)"的文章
And also another article here titled "Why Events Are A Bad Idea (for High-concurrency Servers)"
http://www.usenix.org/events/hotos03/tech/vonbehren.html
推荐答案
通常,如果应用程序预计处理数百万个连接,您可以将多线程范例与基于事件的范例结合起来.
Typically, if the application is expected to handle million of connections, you can combine multi-threaded paradigm with event-based.
- 首先,生成 N 个线程,其中 N == 机器上的内核/处理器数.每个线程都有一个它应该处理的异步套接字列表.
- 然后,对于来自接受者的每个新连接,将新套接字负载平衡"到具有最少套接字的线程.
- 在每个线程内,对所有套接字使用基于事件的模型,以便每个线程实际上可以同时"处理多个套接字.
采用这种方法,
- 你永远不会产生一百万个线程.只要您的系统可以处理,您就有多少.
- 您使用基于事件的多核而不是单核.
这篇关于事件循环与多线程阻塞 IO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文