根据我的理解,只有NodeJS中的I / O是非阻塞的。例如,如果我们执行大量繁重的数学运算,则其他用户在完成之前无法访问服务器。
我想知道在NodeJS中是否存在非阻塞方式来进行大量计算?好奇。
答案 0 :(得分:9)
如果您想要对Node进行长时间运行的计算,那么您将需要启动一个单独的进程来处理这些计算。通常,这可以通过创建一些单独的工作进程并将计算传递给它们来完成。通过这样做,您可以保持主节点事件循环不受阻挡。
在实施方面,您有两个主要选择。
我现在选择选项一。当前的子进程API支持以类似工作人员的方式在进程之间发送消息和对象,因此几乎没有理由使用单独的工作模块。
答案 1 :(得分:2)
您可以使用Hook.io为繁重的计算运行单独的节点进程,并在两者之间进行通信。 Hook.io特别有用,因为它具有自动修复网格,这意味着如果你的一个钩子(进程)崩溃,它可以自动重启。
答案 2 :(得分:1)
使用多个NodeJS实例并通过套接字进行通信。
答案 3 :(得分:1)
使用多个节点实例并通过node-zeromq,HTTP,普通TCP套接字,IPC(例如unix域套接字),JSON-RPC或其他方式进行通信。或者按照上面的建议使用web worker API。
多实例方法有其优点和缺点。缺点是存在启动这些实例和实现自己的交换协议的负担。优点是可以扩展到许多计算机(而不是单个计算机中的许多核心/处理器)。
答案 4 :(得分:0)
我认为这是迟到的,但这是你要了解的nodejs的一个很棒的功能。
多线程的唯一方法就是产生新的进程,到目前为止。 但是nodejs在生成的节点叉之间具有实现的消息功能。 http://nodejs.org/docs/latest/api/child_processes.html#child_process.fork 来自开发人员的出色工作,您可以将对象等作为消息传递给您的孩子和向后
答案 5 :(得分:0)
您可以使用节点群集模块。
答案 6 :(得分:0)
我会使用JXCore - 它是一个基于nodejs的抛光引擎,可以运行你的代码,但有几个选项,包括你要搜索的多线程。在生产中运行这是一个魅力! 项目来源:https://github.com/jxcore/jxcore
功能包括: