Как использовать потоки wroker в nodejs, чтобы ускорить выполнение кода?

#javascript #node.js #multithreading #electron #node-worker-threads

Вопрос:

У меня есть файл js, содержащий в себе несколько функций, которые можно экспортировать в другие файлы js, а затем я выполняю некоторые задачи. но проблема в том, что некоторые функции занимают так много времени, например, есть функция, которая переименовывает тысячи файлов в файловой системе, которая полностью блокирует пользовательский интерфейс electron на 30 секунд. вот как выглядит мой файл:

 const someModules = require("some-nodejs-modules");

function async first_CpuIntensive_Func(){
//some cpu intensive tasks
//some regexps
return someData;
}
function async second_CpuIntensive_Func(){
//some cpu intensive tasks
//some regexps
return someData;
}




module.exports = {first_CpuIntensive_Func,second_CpuIntensive_Func}
 

Я новичок в рабочих потоках nodejs , мне нужна помощь. Или есть какое-то решение, кроме рабочих потоков?

Ответ №1:

  1. Ваши функции не являются асинхронными в вашем примере, обновите свои знания асинхронных функций
  2. Возможно, вы захотите использовать асинхронную оболочку fs MZFS, доступную в npm, чтобы сделать асинхронное чтение / запись файлов
  3. Если вам действительно нужны рабочие потоки (что является довольно сложной темой), вы просто прочтете документы, касающиеся модуля кластера NodeJS

Комментарии:

1. Я использую асинхронные функции модуля fs.

2. Ну, это не вытекает из ваших примеров.

3. Это всего лишь общий пример.

4. Если я вызову одну из функций, она должна выполняться в отдельном потоке, а не в одном потоке.

5. 1. Вам не нужно запускать его в отдельном потоке, так как асинхронные функции не блокируются. 2. Если вам действительно нужно использовать многопоточность, то вы запускаете master worker, вызываете там задачу и распределяете эту задачу между несколькими работниками по своей логике (т. Е. По папкам файлов или датам файлов). Работники выполняют свои задачи и возвращают результат мастеру. Все это работает в иерархической структуре дерева. Если вы загуглите, то найдете множество примеров.