使时间密集型函数(例如图像处理)异步运行以允许其他代码运行或允许所述函数的多个实例并行运行的最佳方法是什么? (可以是特定于 Node 的)例如 fs.readFile() 或 fetch() (XHR)。
最佳答案
因为node.js将你的Javascript作为单线程运行(一次只执行一段Javascript),如果你的计算密集型图像操作当前全部是Javascript代码,那么你可以选择与其他并行运行图像操作JavaScript如下:
启动一个或多个工作进程(可以运行 Node.js 代码或您想要的任何其他程序)并在单独的进程中进行图像操作。然后,他们可以通过任何形式的进程间通信传回结果。这可能是解决 Node.js 中 CPU 密集型问题的最常见方法(将 CPU 密集型内容卸载到其他进程)。您可以使用 child_process 模块来启动这些其他进程并与它们通信。
为 node.js 编写一个 native 代码插件,它使用 native 线程和 native 代码来执行图像操作,并为 node.js 代码提供异步接口(interface)。然后,您可以从 Node.js 异步调用该接口(interface),并在完成时收到通知,但 Node.js 在工作时可以自由地处理其他事情。
将图像处理分成非常小的工作 block ,这样您就可以执行一小部分工作(例如几毫秒的工作),安排下一个工作 block 运行几毫秒并将控制权返回给事件子系统,以便它可以处理与您的小块工作交错的其他事件。仅供引用,设计复杂的代码以小块形式运行是很困难的。您最终必须构建一个状态机,它可以执行少量工作并返回,只是稍后调用以执行更多工作。
关于javascript - 使时间密集型函数异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824310/