为什么我不应该使用异步(事件)IO

Jam*_*mes 9 python asynchronous libevent gevent

我现在正在写一些事件代码(使用gevent在python中),我使用nginx作为Web服务器,我觉得两者都很棒.有人告诉我,事件有一个权衡,但无法看到它.有人可以解释一下吗?

詹姆士

Tob*_*obu 9

解决编程的唯一困难是你永远不能阻止.如果您使用一些设计时考虑了线程的库,则很难实现.如果您不控制这些库,则可以使用fork()+ message ipc.


chr*_*ock 1

最大的问题是,如果没有线程,一个客户端的阻塞将导致所有客户端的阻塞。例如,如果一个客户端请求一种需要操作系统阻止请求进程的资源(磁盘上的文件、调出内存等),则所有客户端都将不得不等待。多线程服务器可以仅阻止一个客户端并继续为其他客户端提供服务。

也就是说,如果上述情况不太可能出现(即所有客户端都将请求相同的资源),那么事件驱动就是正确的选择。

  • 您没有提到的是,您可以以非阻塞的方式访问您需要的资源。这样您就不会阻塞,可以继续回答客户端,并且当资源准备好时从事件系统获得回调,所有这些都在单个线程中进行。 (7认同)
  • @cce:如果c10k还不够,我们可以尝试c500k:http://blog.urbanairship.com/blog/2010/09/29/linux-kernel-tuning-for-c500k/ (2认同)