我知道它们的工作方式与为每个用户创建一个线程不同。这究竟是如何工作的?
(“非阻塞”与它有关吗?)
来自 Twisted 文档:
反应器是 Twisted 中事件循环的核心——使用 Twisted 驱动应用程序的循环。事件循环是一种编程结构,它在程序中等待和分派事件或消息。它通过调用一些内部或外部的“事件提供者”来工作,通常会阻塞直到事件到达,然后调用相关的事件处理程序(“调度事件”)。反应器为许多服务提供基本接口,包括网络通信、线程和事件分派。
另见http://en.wikipedia.org/wiki/Event_loop
非阻塞涉及如果您想在单个线程中处理多个套接字(或更一般地,来自任何类型的事件源中的两个以上)上的事件,则不能使用阻塞操作来处理这些事件. 如果您在第一个套接字上进行阻塞读取,那么您将无法从第二个套接字读取,直到某些字节到达第一个套接字。这不能很好地工作,因为您无法真正知道哪个套接字将首先读取字节。相反,您使用类似的东西select
(在上面链接的 Wikipedia 页面上进行了更详细的描述)来告诉您哪个套接字有字节,然后从该套接字读取它们而不阻塞。
这一切都意味着您可以一个接一个地为来自任意数量的事件源的事件提供服务,给人一种同时处理它们的感觉。