2016-11-04 21 views
0

此問題的任何谷歌結果都指向解釋節點如何與一個線程進行異步操作的指南。那不是我要找的。NodeJS使用IO線程進行CPU工作

讓我說我需要處理一個blob,它需要5分鐘的CPU時間來處理它。

我不想阻止我的主線程,因爲此工作人員將變得無法響應。

我真的想爲處理工作的邏輯公開一個接口,並將它傳遞給其中一個IO線程,就像在fs.readFile中一樣,並且讓我們知道處理完成的時間。

我該怎麼做?

+0

我會建議寫一個腳本,並處理和使用child_process從主腳本運行它做了一個非常簡單的例子。這將確保您的主應用程序將仍然響應,因爲另一個腳本將在另一個線程中運行。 – Molda

+0

我明白了你的觀點,但爲什麼在使用fs庫時更直接?這個庫也產生了另一個過程嗎?我想不是。 – johni

+0

我不是專家,但我認爲IO操作,如readFile沒有阻止主線程,因爲從HDD到RAM的數據處理過程是獨立於主線程完成的,它由OS管理,而且FS不會產生新的處理。這與child_process完全不同。這是我所知道的:) – Molda

回答

0

Javascript/Nodejs是單線程的。 你的用例似乎適合一個消息隊列系統。例如Rabbitmq

您基本上最終得到了工作者服務(消費者)和任務隊列。 您的任務隊列將向消息總線發送消息。消息總線將此消息轉發給另一個服務。

我在GitHub上https://github.com/holoduke/nodejs_rabbitmq_simple_example