【问题标题】:NodeJS use IO threads for CPU workNodeJS 使用 IO 线程进行 CPU 工作
【发布时间】:2017-03-18 08:06:00
【问题描述】:

这个问题在谷歌上的任何结果都是指解释节点如何用一个线程进行异步操作的指南。那不是我要找的。

假设我需要处理一个 blob,处理它需要 5 分钟的 CPU 时间。

我不想阻塞我的主线程,因为这个工作线程会变得没有响应。

我真的很想为执行处理工作的逻辑公开一个接口,并将其传递给一个 IO 线程,就像在fs.readFile 中一样,并在处理完成时被告知。

我该怎么做?

【问题讨论】:

  • 我建议编写一个执行处理的脚本并使用 child_process 从主脚本运行它。这将确保您的主应用程序仍将响应,因为其他脚本将在另一个线程中运行。
  • 我明白你的意思,但为什么使用 fs 库更简单?这个库是否还会产生另一个进程?我认为不会。
  • 我不是专家,但我认为 readFile 等 IO 操作不会阻塞主线程,因为将数据从 HDD 复制到 RAM 的过程是独立于主线程完成的,它由 os 和fs 不会产生新进程。它与 child_process 完全不同。这是我所知道的:)

标签: node.js asynchronous parallel-processing


【解决方案1】:

Javascript / Nodejs 是单线程的。 您的用例似乎适合消息队列系统。例如 Rabbitmq

您基本上以工作服务(消费者)和任务排队器结束。 您的任务排队器将向消息总线发送消息。消息总线将此消息转发到另一个服务。

我在github上做了一个很简单的例子https://github.com/holoduke/nodejs_rabbitmq_simple_example

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多