如何扭曲/龙卷风等等

时间:2010-06-18 06:34:03

标签: multithreading twisted nonblocking tornado

据我所知,他们的工作方式与为每个用户制作一个帖子有所不同。这究竟是如何运作的?

('非阻塞'是否与它有关?)

1 个答案:

答案 0 :(得分:6)

来自Twisted文档:

  

反应堆是Twisted中事件循环的核心 - 循环使用Twisted驱动应用程序。事件循环是一种编程构造,它等待和分派程序中的事件或消息。它通过调用一些内部或外部“事件提供程序”来工作,它通常会阻塞直到事件到达,然后调用相关的事件处理程序(“调度事件”)。该反应器为许多服务提供基本接口,包括网络通信,线程和事件分派。

另见http://en.wikipedia.org/wiki/Event_loop

非阻塞涉及到如果您想在单个线程中处理多个套接字上的事件(或者更常见的是,来自两种以上的任何类型的事件源),无法使用阻止操作来处理这些事件。如果在第一个套接字上执行阻塞读取,那么在第一个套接字上的某些字节到达之前,您将无法从第二个套接字读取。这不能很好地工作,因为您无法真正知道哪个套接字将首先读取字节。相反,你使用select(在上面链接的维基百科页面上详细描述)来告诉你哪个套接字有字节,然后从那个套接字中读取它们而不会阻塞。

这意味着您可以一个接一个地为来自任意数量的事件源的事件提供服务,从而同时处理它们。