【发布时间】:2011-03-05 07:16:12
【问题描述】:
我了解它们的工作方式与为每个用户创建一个线程不同。具体是如何工作的?
(“非阻塞”是否与它有关?)
【问题讨论】:
-
如果事情还不清楚,请查看 org.deftserver.web.IOLoop 类。 (www.deftserver.org)
标签: multithreading twisted nonblocking tornado
我了解它们的工作方式与为每个用户创建一个线程不同。具体是如何工作的?
(“非阻塞”是否与它有关?)
【问题讨论】:
标签: multithreading twisted nonblocking tornado
来自 Twisted 文档:
反应器是 Twisted 中事件循环的核心——该循环使用 Twisted 驱动应用程序。事件循环是一种编程结构,它在程序中等待和分派事件或消息。它通过调用一些内部或外部的“事件提供者”来工作,通常会阻塞直到事件到达,然后调用相关的事件处理程序(“调度事件”)。反应器为许多服务提供基本接口,包括网络通信、线程和事件分派。
另见http://en.wikipedia.org/wiki/Event_loop
非阻塞 涉及到,如果您想在单个线程中处理多个套接字(或更一般地说,来自任何类型的事件源中的两个以上)上的事件,您不能使用 阻塞 操作来处理这些事件。如果您在第一个套接字上进行阻塞读取,那么您将无法从第二个套接字读取,直到某些字节到达第一个套接字。这不能很好地工作,因为您无法真正知道哪个套接字将首先读取字节。相反,您使用select 之类的东西(在上面链接的维基百科页面上进行了更详细的描述)告诉您哪个套接字有字节,然后从该套接字读取它们而不阻塞。
这意味着您可以一个接一个地为来自任意数量的事件源的事件提供服务,给人一种同时处理它们的感觉。
【讨论】: