Asynchronous “一个”iLoop如何处理10k连接?

Asynchronous “一个”iLoop如何处理10k连接?,asynchronous,nginx,tornado,event-driven,Asynchronous,Nginx,Tornado,Event Driven,我为这个愚蠢的问题感到抱歉,但我真的很困惑;我希望你能纠正我的错误 在基于线程的服务器(如Apache)中,我了解到,对于每个客户机,将为其创建一个新的“worker”,以满足其所有需求 在像Nginx和Tornado这样的事件驱动中,我感到困惑,尤其是在Python的GIL这样的线程不安全的情况下;据我所知,只有一个循环可以处理所有客户机请求,因此我的愚蠢理解是,如果有10000个同时连接,我不知道如何处理所有10000个请求 在事件驱动服务器中,您只需使用非阻塞调用处理来自特定连接的连接读取

我为这个愚蠢的问题感到抱歉,但我真的很困惑;我希望你能纠正我的错误

在基于线程的服务器(如Apache)中,我了解到,对于每个客户机,将为其创建一个新的“worker”,以满足其所有需求


在像Nginx和Tornado这样的事件驱动中,我感到困惑,尤其是在Python的GIL这样的线程不安全的情况下;据我所知,只有一个循环可以处理所有客户机请求,因此我的愚蠢理解是,如果有10000个同时连接,我不知道如何处理所有10000个请求

在事件驱动服务器中,您只需使用非阻塞调用处理来自特定连接的连接读取和写入,实际上是一个接一个地进行。您通常使用一些调用在连接之间进行多路复用选择、轮询,…,这些调用告诉您需要服务哪些连接,然后您依次服务这些连接。

那么为什么我们不能在事件驱动服务器和基于线程的服务器之间进行组合呢?您可以。e、 g:每个CPU核心可能有一个线程,其中每个线程都是事件驱动的。您还可以使用工作线程来处理动态页面生成PHP、JSP等,并提供静态内容图像等。。。问题是Python CPytohn拥有GIL,正如前面所说的Tornado处理10k连接,所以我对这种情况感到“震惊”!如果发生10k同时连接,那么,如果一个操作有1秒,il将被拆分为1/10k?这取决于。Tornado可能可以处理10k/s的典型连接,但物理限制仍然存在:如果您没有bandwith,您将无法处理要求下载大量文件的10k连接。在这种情况下,在维护每个连接时,最理想的情况是,您的服务器只发送当心:在每次迭代中使用*所需的最大延迟/活动连接即时生成的公式。在这种情况下,它将是您的出站带宽,这可能远低于此值。繁忙的服务器应该有更多的带宽。