Воркеры (worker threads) в Node.js

Для создания полнофункциональных многопоточных приложений в  Node.js используется модуль worker_threads.

Модуль node:worker_threads позволяет использовать потоковые воркеры (thread worker) — фрагменты кода, обычно извлекаемые из файла и выполняемые в отдельном потоке (реализация параллельного исполнения JavaScript).

Для доступа к node:worker_threads его необходимо импортировать:

Особенности worker threads в Node.js:

  1. Рабочие потоки (worker threads) полезны для выполнения операций JavaScript с интенсивным использованием процессора, однако следует учитывать, что в Node.js встроенные асинхронные операции ввода-вывода более эффективны, чем реализованные с worker threads.
  2. В отличие от child_process или cluster, worker_threads может совместно использовать память путем передачи экземпляров ArrayBuffer или совместного использования экземпляров SharedArrayBuffer.

Некоторые свойства модуля worker_threads:

  • isMainThread - true, если код не работает внутри дочернего потока воркера;
  • workerData - содержит данные, включённые в конструктор воркера созданным потоком;
  • parentPort - экземпляр класса MessagePort, используется для связи с родительским потоком;
  • threadId - уникальный идентификатор, присвоенный воркеру.

Пример свойства isMainThread

[свернуть]

Пример работы с workerData

Или передадим в workerData, например, результат выполнения другой функции:

[свернуть]

Пример использования свойства worker.parentPort

Если поток является потоком Worker, то worker.parentPort разрешает связь с родительским потоком, при этом:

  • сообщения, отправленные из дочернего потока с помощью parentPort.postMessage(), доступны в родительском потоке с помощью worker.on('message');
  • сообщения, отправленные из родительского потока с помощью worker.postMessage(), доступны в дочернем потоке с помощью parentPort.on('message').

Например:

[свернуть]

 

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.