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