为什么我不应该使用异步(事件驱动)IO
我现在正在写一些事件驱动的代码(用Python和gevent),并且我使用nginx作为网络服务器,我觉得这两者都很不错。有人告诉我,事件驱动的方式有一些权衡,但我没有看到具体是什么。有人能帮我解释一下吗?
詹姆斯
2 个回答
9
事件驱动编程唯一的难点就是你绝不能让程序停下来。这一点如果你使用一些是为了线程设计的库,就会比较难做到。如果你无法控制这些库,使用fork()加上消息传递的方式会是一个不错的选择。
1
最大的问题是,如果没有线程,一个客户的请求被阻塞了,所有客户都会受到影响。举个例子,如果一个客户请求一个资源(比如磁盘上的文件、被换出的内存等),这个请求需要操作系统把这个进程暂停,那么所有其他客户也得等着。可是如果是一个多线程的服务器,它可以只暂停那个客户的请求,继续为其他客户服务。
不过,如果上面的情况不太可能发生(也就是说,所有客户请求的资源都是一样的),那么使用事件驱动的方式会更好。