javascript - 使时间密集型函数异步

标签 javascript node.js asynchronous

使时间密集型函数(例如图像处理)异步运行以允许其他代码运行或允许所述函数的多个实例并行运行的最佳方法是什么? (可以是特定于 Node 的)例如 fs.readFile() 或 fetch() (XHR)。

最佳答案

因为node.js将你的Javascript作为单线程运行(一次只执行一段Javascript),如果你的计算密集型图像操作当前全部是Javascript代码,那么你可以选择与其他并行运行图像操作JavaScript如下:

  1. 启动一个或多个工作进程(可以运行 Node.js 代码或您想要的任何其他程序)并在单独的进程中进行图像操作。然后,他们可以通过任何形式的进程间通信传回结果。这可能是解决 Node.js 中 CPU 密集型问题的最常见方法(将 CPU 密集型内容卸载到其他进程)。您可以使用 child_process 模块来启动这些其他进程并与它们通信。

  2. 为 node.js 编写一个 native 代码插件,它使用 native 线程和 native 代码来执行图像操作,并为 node.js 代码提供异步接口(interface)。然后,您可以从 Node.js 异步调用该接口(interface),并在完成时收到通知,但 Node.js 在工作时可以自由地处理其他事情。

  3. 将图像处理分成非常小的工作 block ,这样您就可以执行一小部分工作(例如几毫秒的工作),安排下一个工作 block 运行几毫秒并将控制权返回给事件子系统,以便它可以处理与您的小块工作交错的其他事件。仅供引用,设计复杂的代码以小块形式运行是很困难的。您最终必须构建一个状态机,它可以执行少量工作并返回,只是稍后调用以执行更多工作。

关于javascript - 使时间密集型函数异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824310/

相关文章:

javascript - 如何在 passport-facebook 身份验证中传递额外数据

node.js - Express 中跨子域的 session

javascript - 如何使用 execa 执行一系列命令?

node.js - Node Js 中带有同步的错误链

php - 使我的代码异步,这样就不会永远加载

javascript - 在 AngularJS 中加载异步谷歌地图

javascript - 如何从 PHP 后端接收 JSON 对象并将其转换为前端的 JavaScript 数组

javascript - 有什么方法可以自动加载 webpack 外部文件吗?

javascript - JS树加载时间问题

node.js - Mongoose - 故意将重复的属性插入到同一文档中