node.js的cpu密集程度是多少(担心阻塞事件循环)

时间:2015-08-16 18:54:51

标签: javascript node.js blocking event-loop

我正在编写一个包含各种社区的节点应用程序,在这些社区中,用户可以创建和加入房间/大厅。我已经通过大厅对象集合将这些大厅的逻辑写入节点应用程序本身。

一旦创建,业余爱好需要一些维护。用户可以更改大厅内的各种状态,我也可以定期(大约每2秒)使用socket.io为每个大厅调用一些用户输入" live"。

这些任务都没有太多cpu密集。我预见的最大的潜在威胁是负载分配算法,但它不是"现场呼叫"并且仅在大厅创建者按下按钮时激活(它也不会在超过10件事情上执行)。

我担心的是,在生产中,如果服务器开始接近100-200个大厅,我可能会冒险阻止事件循环。我的担忧是否合理?这些操作的潜在数量是否很小,大到足以将此代码卸载到单独的可执行文件或涉及各种franken-thread javascript库?

TL; DR: 节点应用包含运行常规小任务的对象。如果有很多这样的对象,我应该担心事件循环阻塞。

1 个答案:

答案 0 :(得分:2)

没有办法提前知道你描述的内容是否会“填满”事件循环并且一直占用一个线程。如果你想“知道”,你必须建立一个模拟和测量,同时使用相应的硬件和你期望在生产中使用的硬件。

对于几乎所有的性能问题,您必须再次进行测量,测量和测量才能真正了解或了解您是否遇到问题,如果有问题,那么问题的主要来源是什么。

对于非计算密集型事物,您的CPU可能会处理大量活动。如果你让很多用户每两秒钟都进行一次冲击,那么你最终可能会遇到导致问题的瓶颈。每2秒进行一次交易的200个用户意味着100个事务/秒,这意味着如果每个事务占用超过10毫秒的CPU或任何其他序列化资源(例如网卡),那么您可能会遇到问题。

至于将一些工作卸载到另一个流程,在你测量是否有问题之前,我不会花太多时间来担心这个问题。如果你这样做,那么理解问题的主要原因是非常重要的。简单地将node.js进程集群化为将多个进程放在同一服务器上比将核心逻辑分解为多个进程更有意义。这将取决于你的问题的主要原因是什么(如果你有问题)。或者,您最终可能需要多个网卡。或者是其他东西。在衡量和理解之前要知道它还为时过早。