事件循环与多线程阻塞 IO [英] Event Loop vs Multithread blocking IO

查看:15
本文介绍了事件循环与多线程阻塞 IO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在阅读有关服务器架构的评论.

I was reading a comment about server architecture.

http://news.ycombinator.com/item?id=520077

在此评论中,此人说了三件事:

In this comment, the person says 3 things:

  1. 事件循环一次又一次地被证明在大量低活动连接中真正发挥作用.
  2. 相比之下,与事件循环相比,具有线程或进程的阻塞 IO 模型已经一次又一次地展示了减少每个请求的延迟.
  3. 在负载较轻的系统上,差异是无法区分的.在负载下,大多数事件循环选择放慢速度,大多数阻塞模型选择卸载.

这些是真的吗?

还有另一篇题为为什么事件是一个坏主意(对于高并发服务器)"的文章

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.

  1. 首先,生成 N 个线程,其中 N == 机器上的内核/处理器数.每个线程都有一个它应该处理的异步套接字列表.
  2. 然后,对于来自接受者的每个新连接,将新套接字负载平衡"到具有最少套接字的线程.
  3. 在每个线程内,对所有套接字使用基于事件的模型,以便每个线程实际上可以同时"处理多个套接字.

采用这种方法,

  1. 你永远不会产生一百万个线程.只要您的系统可以处理,您就有多少.
  2. 您使用基于事件的多核而不是单核.

这篇关于事件循环与多线程阻塞 IO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆