Javascript 用twisted和node理解事件循环

Javascript 用twisted和node理解事件循环,javascript,python,node.js,asynchronous,Javascript,Python,Node.js,Asynchronous,我正在尝试选择一个平台来编写我的网络应用程序,它将是一个小型实时在线游戏服务器。我不太熟悉异步理论,尽管我知道如何编写一点异步代码 我对javascript和python都有相同的了解 所以我在twisted上读到他说: 在回调期间,Twisted循环在我们的 代码。因此,我们应该确保回调代码不会浪费任何时间。 特别是,我们应该避免在应用程序中进行阻塞I/O调用 回调。否则,我们将破坏使用的全部意义 首先是反应堆模式。我不吃任何东西 为了防止代码阻塞,我们必须采取特殊的预防措施 一定不要这样做。

我正在尝试选择一个平台来编写我的网络应用程序,它将是一个小型实时在线游戏服务器。我不太熟悉异步理论,尽管我知道如何编写一点异步代码

我对javascript和python都有相同的了解

所以我在twisted上读到他说:

在回调期间,Twisted循环在我们的 代码。因此,我们应该确保回调代码不会浪费任何时间。 特别是,我们应该避免在应用程序中进行阻塞I/O调用 回调。否则,我们将破坏使用的全部意义 首先是反应堆模式。我不吃任何东西 为了防止代码阻塞,我们必须采取特殊的预防措施 一定不要这样做。正如我们最终将看到的,对于一般情况 对于网络I/O,我们不必像Twisted那样担心它 异步通信为我们提供了方便

我想看看这与
node.js
上的事件循环有什么不同。我相信
node.js
实现了事件循环,它从不阻塞,还是我遗漏了什么

  • 我用
    node.js在回调上写了一些阻塞代码,这是否意味着我犯了错误

  • 为什么twisted在仍然阻塞时被称为异步和事件驱动

干杯,

Maj

Twisted、node.js和其他所有异步框架在这里的行为方式完全相同:如果在回调中编写阻塞代码,整个事件循环将被阻塞,直到回调完成

异步框架非常适合做I/O绑定的工作;事件循环在等待I/O时不会被阻塞,因为它都可以以非阻塞的方式完成。当有数据准备好读取时,事件循环触发回调,回调处理数据,然后事件循环再次控制。当您听到这些框架被称为“异步”和“事件驱动”时,它指的是这种非阻塞I/O+事件循环模型

然而,当您实际需要对发送/接收的数据进行某种处理时,您需要小心。事件循环是单线程的;一次只能发生一个基于CPU的操作。这意味着,如果您在回调中执行一些耗时10秒的昂贵计算,您的事件循环将被阻塞10秒。node.js中没有额外的魔法可以避免这种情况

如果希望能够在不阻塞事件循环的情况下执行基于CPU的操作,node.js(和twisted)具有将CPU绑定的工作发送到子进程的机制,然后在子进程完成时获取结果。政府实际上提到了这一点:

但是多处理器并发呢?不是线吗 需要将程序扩展到多核计算机吗?你可以重新开始 通过这些其他流程的流程将是 并行安排。用于跨网络负载平衡传入连接 多个进程使用集群模块


这是迄今为止我所看到的最好的解释。但我会尽量把答案保留几个小时。。。我希望你不介意。但是这些信息我在任何地方都找不到。另外,你给我的用例(小型实时游戏服务器)的建议也非常好。谢谢你。希望看到更多关于这些的建议。如果我理解正确的话。使用事件循环仅接收和发送数据,并使用另一个进程(子进程)处理数据的解析和序列化,或者使用另一个进程(子进程)处理接收到的数据的逻辑和发送的数据。为了支持我的观点,关于node.js服务器性能不佳,因为事件循环被某个json解析阻塞,所用时间比预期的要长。通过
,我在任何地方都找不到此信息。我没有怀疑你。我感谢你提供了这样的信息,这是我在其他任何地方都找不到的