0
此问题的任何谷歌结果都指向解释节点如何与一个线程进行异步操作的指南。那不是我要找的。NodeJS使用IO线程进行CPU工作
让我说我需要处理一个blob,它需要5分钟的CPU时间来处理它。
我不想阻止我的主线程,因为此工作人员将变得无法响应。
我真的想为处理工作的逻辑公开一个接口,并将它传递给其中一个IO线程,就像在fs.readFile
中一样,并且让我们知道处理完成的时间。
我该怎么做?
此问题的任何谷歌结果都指向解释节点如何与一个线程进行异步操作的指南。那不是我要找的。NodeJS使用IO线程进行CPU工作
让我说我需要处理一个blob,它需要5分钟的CPU时间来处理它。
我不想阻止我的主线程,因为此工作人员将变得无法响应。
我真的想为处理工作的逻辑公开一个接口,并将它传递给其中一个IO线程,就像在fs.readFile
中一样,并且让我们知道处理完成的时间。
我该怎么做?
Javascript/Nodejs是单线程的。 你的用例似乎适合一个消息队列系统。例如Rabbitmq
您基本上最终得到了工作者服务(消费者)和任务队列。 您的任务队列将向消息总线发送消息。消息总线将此消息转发给另一个服务。
我在GitHub上https://github.com/holoduke/nodejs_rabbitmq_simple_example
我会建议写一个脚本,并处理和使用child_process从主脚本运行它做了一个非常简单的例子。这将确保您的主应用程序将仍然响应,因为另一个脚本将在另一个线程中运行。 – Molda
我明白了你的观点,但为什么在使用fs库时更直接?这个库也产生了另一个过程吗?我想不是。 – johni
我不是专家,但我认为IO操作,如readFile没有阻止主线程,因为从HDD到RAM的数据处理过程是独立于主线程完成的,它由OS管理,而且FS不会产生新的处理。这与child_process完全不同。这是我所知道的:) – Molda