我现在正在编写一些事件代码(在 python 中使用 gevent),我使用 nginx 作为 Web 服务器,我觉得两者都很棒。有人告诉我,有一个权衡事件,但看不到它。有人可以阐明一下吗?
詹姆士
我现在正在编写一些事件代码(在 python 中使用 gevent),我使用 nginx 作为 Web 服务器,我觉得两者都很棒。有人告诉我,有一个权衡事件,但看不到它。有人可以阐明一下吗?
詹姆士
事件编程的唯一困难是你永远不能阻塞。如果您使用一些在设计时考虑到线程的库,这可能很难实现。如果您不控制这些库,则可以使用 fork() + message ipc。
最大的问题是,如果没有线程,一个客户端的阻塞将导致所有客户端的阻塞。例如,如果一个客户端请求需要操作系统阻止请求进程的资源(磁盘上的文件、分页内存等),那么所有客户端都必须等待。多线程服务器可以只阻止一个客户端并继续为其他客户端提供服务。
也就是说,如果上述情况不太可能发生(即所有客户端将请求相同的资源),那么事件驱动就是要走的路。