worker_threads
Модуль node:worker_threads позволяет использовать потоки, выполняющие JavaScript параллельно. Для доступа к нему:
import worker from 'node:worker_threads';
Рабочие потоки полезны для выполнения ресурсоёмких операций JavaScript, требующих интенсивного использования процессора. Для задач с интенсивным вводом-выводом они не так полезны. Встроенные асинхронные операции ввода-вывода Node.js эффективнее рабочих потоков.
В отличие от child_process или cluster, worker_threads могут совместно использовать память. Это достигается передачей экземпляров ArrayBuffer или совместным использованием экземпляров SharedArrayBuffer.
import {
Worker, isMainThread, parentPort, workerData,
} from 'node:worker_threads';
import { parse } from 'some-js-parsing-library';
if (isMainThread) {
module.exports = function parseJSAsync(script) {
return new Promise((resolve, reject) => {
const worker = new Worker(__filename, {
workerData: script,
});
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
});
});
};
} else {
const script = workerData;
parentPort.postMessage(parse(script));
}
Приведённый выше пример создаёт поток Worker для каждого вызова parseJSAsync(). На практике для таких задач следует использовать пул рабочих потоков. В противном случае накладные расходы на создание рабочих потоков, скорее всего, превысят их пользу.
При реализации пула рабочих потоков используйте API AsyncResource, чтобы сообщить диагностическим инструментам (например, для формирования асинхронных трассировок стека) о связи между задачами и их результатами. Пример реализации см. в "Using AsyncResource for a Worker thread pool" документации async_hooks.
По умолчанию рабочие потоки наследуют параметры, не относящиеся к конкретному процессу. Информацию о настройке параметров рабочих потоков, в частности параметров argv и execArgv, см. в Worker constructor options.
Использование в Deno
import * as mod from "node:worker_threads";
класс MessageChannel
Использование в Deno
import { MessageChannel } from "node:worker_threads";
Экземпляры класса worker.MessageChannel представляют собой асинхронный двусторонний канал связи. У MessageChannel нет собственных методов. new MessageChannel() возвращает объект со свойствами port1 и port2, которые ссылаются на связанные экземпляры MessagePort.
import { MessageChannel } from 'node:worker_threads';
const { port1, port2 } = new MessageChannel();
port1.on('message', (message) => console.log('received', message));
port2.postMessage({ foo: 'bar' });
// Prints: received { foo: 'bar' } from the `port1.on('message')` listener
Свойства
port1: MessagePort port2: MessagePort переменная MessageChannel
Класс MessageChannel является глобальной ссылкой на import { MessageChannel } from 'worker_threads' https://nodejs.org/api/globals.html#messagechannel
Тип
globalThis extends { onmessage: any; MessageChannel: infer T; } ? T : _MessageChannel класс MessagePort
Использование в Deno
import { MessagePort } from "node:worker_threads";
Экземпляры класса worker.MessagePort представляют один конец асинхронного двустороннего канала связи. С их помощью можно передавать структурированные данные, области памяти и другие объекты MessagePort между разными Worker.
Эта реализация соответствует браузерным MessagePort.
Свойства
addEventListener: EventTarget["addEventListener"] dispatchEvent: EventTarget["dispatchEvent"] removeEventListener: EventTarget["removeEventListener"] Методы
addListener(
event: "close",
listener: () => void,
): this addListener(
event: "message",
listener: (value: any) => void,
): this addListener(
event: "messageerror",
listener: (error: Error) => void,
): this addListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this close(): void Запрещает дальнейшую отправку сообщений в обоих направлениях соединения. Этот метод можно вызвать, если через этот MessagePort больше не будет передаваться информация.
Событие 'close' event возникает у обоих экземпляров MessagePort, участвующих в канале.
emit(event: "close"): boolean emit(
event: "message",
value: any,
): boolean emit(
event: "messageerror",
error: Error,
): boolean emit(
event: string | symbol,
...args: any[],
): boolean off(
event: "close",
listener: () => void,
): this off(
event: "message",
listener: (value: any) => void,
): this off(
event: "messageerror",
listener: (error: Error) => void,
): this off(
event: string | symbol,
listener: (...args: any[]) => void,
): this on(
event: "close",
listener: () => void,
): this on(
event: "message",
listener: (value: any) => void,
): this on(
event: "messageerror",
listener: (error: Error) => void,
): this on(
event: string | symbol,
listener: (...args: any[]) => void,
): this once(
event: "close",
listener: () => void,
): this once(
event: "message",
listener: (value: any) => void,
): this once(
event: "messageerror",
listener: (error: Error) => void,
): this once(
event: string | symbol,
listener: (...args: any[]) => void,
): this postMessage(
value: any,
transferList?: readonly TransferListItem[],
): void Отправляет значение JavaScript принимающей стороне этого канала. value передаётся способом, совместимым с алгоритмом структурированного клонирования HTML.
В частности, основные отличия от JSON таковы:
-
valueможет содержать циклические ссылки. -
valueможет содержать экземпляры встроенных типов JavaScript, таких какRegExp,BigInt,Map,Setи т. д. -
valueможет содержать типизированные массивы, использующие какArrayBuffer, так иSharedArrayBuffer. -
valueможет содержать экземплярыWebAssembly.Module. -
valueне может содержать нативные объекты (на основе C++), кроме:
import { MessageChannel } from 'node:worker_threads';
const { port1, port2 } = new MessageChannel();
port1.on('message', (message) => console.log(message));
const circularData = {};
circularData.foo = circularData;
// Prints: { foo: [Circular] }
port2.postMessage(circularData);
transferList может быть списком объектов ArrayBuffer, MessagePort и FileHandle. После передачи они становятся недоступны на отправляющей стороне канала (даже если не входят в value). В отличие от child processes, передача дескрипторов, например сетевых сокетов, в настоящее время не поддерживается.
Если value содержит экземпляры SharedArrayBuffer, они доступны из обоих потоков. Их нельзя указывать в transferList.
value всё ещё может содержать экземпляры ArrayBuffer, не включённые в transferList; в этом случае базовая память копируется, а не перемещается.
import { MessageChannel } from 'node:worker_threads';
const { port1, port2 } = new MessageChannel();
port1.on('message', (message) => console.log(message));
const uint8Array = new Uint8Array([ 1, 2, 3, 4 ]);
// This posts a copy of `uint8Array`:
port2.postMessage(uint8Array);
// This does not copy data, but renders `uint8Array` unusable:
port2.postMessage(uint8Array, [ uint8Array.buffer ]);
// The memory for the `sharedUint8Array` is accessible from both the
// original and the copy received by `.on('message')`:
const sharedUint8Array = new Uint8Array(new SharedArrayBuffer(4));
port2.postMessage(sharedUint8Array);
// This transfers a freshly created message port to the receiver.
// This can be used, for example, to create communication channels between
// multiple `Worker` threads that are children of the same parent thread.
const otherChannel = new MessageChannel();
port2.postMessage({ port: otherChannel.port1 }, [ otherChannel.port1 ]);
Объект сообщения клонируется сразу, поэтому после отправки его можно изменить без каких-либо побочных эффектов.
Дополнительные сведения о механизмах сериализации и десериализации, лежащих в основе этого API, см. в serialization API of the node:v8 module.
prependListener(
event: "close",
listener: () => void,
): this prependListener(
event: "message",
listener: (value: any) => void,
): this prependListener(
event: "messageerror",
listener: (error: Error) => void,
): this prependListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this prependOnceListener(
event: "close",
listener: () => void,
): this prependOnceListener(
event: "message",
listener: (value: any) => void,
): this prependOnceListener(
event: "messageerror",
listener: (error: Error) => void,
): this prependOnceListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this ref(): void Противоположность unref(). Вызов ref() для порта, ранее подвергнутого unref(), не позволяет программе завершиться, если это единственный оставшийся активный дескриптор (поведение по умолчанию). Если порт подвергнут ref(), повторный вызов ref() ничего не меняет.
Если слушатели добавляются или удаляются с помощью .on('message'), порт автоматически подвергается ref() или unref() в зависимости от наличия слушателей события.
removeListener(
event: "close",
listener: () => void,
): this removeListener(
event: "message",
listener: (value: any) => void,
): this removeListener(
event: "messageerror",
listener: (error: Error) => void,
): this removeListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this start(): void Запускает получение сообщений через этот MessagePort. При использовании этого порта в качестве эмиттера событий метод вызывается автоматически после добавления слушателей 'message'.
Этот метод существует для совместимости с API Web MessagePort. В Node.js он полезен только для игнорирования сообщений, когда слушатель событий отсутствует. Обработка .onmessage в Node.js также отличается. Установка этого параметра автоматически вызывает .start(), а его сброс позволяет сообщениям накапливаться в очереди, пока не будет задан новый обработчик или порт не будет удалён.
unref(): void Вызов unref() для порта позволяет потоку завершиться, если этот порт является единственным активным дескриптором в системе событий. Если порт уже подвергнут unref(), повторный вызов unref() ничего не меняет.
Если слушатели добавляются или удаляются с помощью .on('message'), порт автоматически подвергается ref() или unref() в зависимости от наличия слушателей события.
переменная MessagePort
Класс MessagePort является глобальной ссылкой на import { MessagePort } from 'worker_threads' https://nodejs.org/api/globals.html#messageport
Тип
globalThis extends { onmessage: any; MessagePort: infer T; } ? T : _MessagePort класс Worker
Использование в Deno
import { Worker } from "node:worker_threads";
Метод getHeapSnapshot не поддерживается.
Класс Worker представляет собой независимый поток выполнения JavaScript. В нём доступны большинство API Node.js.
Примечательные отличия среды Worker:
- Потоки
process.stdin,process.stdoutиprocess.stderrмогут перенаправляться родительским потоком. - Переменной
import { isMainThread } from 'node:worker_threads'присваивается значениеfalse. - Доступен порт сообщений
import { parentPort } from 'node:worker_threads'. -
process.exit()останавливает не всю программу, а только отдельный поток, аprocess.abort()недоступен. -
Методы
process.chdir()иprocess, задающие идентификаторы групп или пользователей, недоступны. -
process.env— это копия переменных окружения родительского потока, если не указано иное. Изменения в одной копии не видны в других потоках и не видны нативным дополнениям (если толькоworker.SHARE_ENVне передан как параметрenvконструкторуWorker). В Windows, в отличие от основного потока, копия переменных окружения работает с учётом регистра. -
process.titleнельзя изменить. - Сигналы не передаются через
process.on('...'). - Выполнение может быть остановлено в любой момент в результате вызова
worker.terminate(). - Каналы IPC родительских процессов недоступны.
- Модуль
trace_eventsне поддерживается. - Нативные дополнения можно загружать из нескольких потоков, только если они соответствуют требованиям
certain conditions.
Можно создавать экземпляры Worker внутри других экземпляров Worker.
Как и в веб-воркерах и node:cluster module, двустороннюю связь можно обеспечить обменом сообщениями между потоками. Внутри Worker имеется встроенная пара MessagePort, которые уже связаны друг с другом при создании Worker. Хотя объект MessagePort на стороне родительского потока напрямую не доступен, его функциональность предоставляется через worker.postMessage() и событие worker.on('message') объекта Worker родительского потока.
Чтобы создавать пользовательские каналы обмена сообщениями (это предпочтительнее использования глобального канала по умолчанию, поскольку способствует разделению обязанностей), можно создать объект MessageChannel в любом потоке и передать один из MessagePort этого MessageChannel в другой поток через уже существующий канал, например глобальный.
Дополнительные сведения о передаче сообщений и о том, какие значения JavaScript можно успешно передать через границу потоков, см. в port.postMessage().
import assert from 'node:assert';
import {
Worker, MessageChannel, MessagePort, isMainThread, parentPort,
} from 'node:worker_threads';
if (isMainThread) {
const worker = new Worker(__filename);
const subChannel = new MessageChannel();
worker.postMessage({ hereIsYourPort: subChannel.port1 }, [subChannel.port1]);
subChannel.port2.on('message', (value) => {
console.log('received:', value);
});
} else {
parentPort.once('message', (value) => {
assert(value.hereIsYourPort instanceof MessagePort);
value.hereIsYourPort.postMessage('the worker is sending this');
value.hereIsYourPort.close();
});
}
Конструкторы
Worker(
filename: string | URL,
options?: WorkerOptions,
) Свойства
performance: WorkerPerformance Объект для получения сведений о производительности экземпляра Worker. Аналог perf_hooks.performance.
resourceLimits: ResourceLimits | undefined Предоставляет набор ограничений ресурсов движка JS для этого потока Worker. Если конструктору Worker передан параметр resourceLimits, здесь будут указаны соответствующие значения.
Если работа Worker остановлена, возвращается пустой объект.
Это поток для чтения, содержащий данные, записанные в process.stderr внутри потока Worker. Если конструктору Worker не передан параметр stderr: true, данные направляются в поток process.stderr родительского потока.
Если конструктору Worker передан параметр stdin: true, это поток для записи. Данные, записанные в этот поток, будут доступны в потоке Worker как process.stdin.
Это поток для чтения, содержащий данные, записанные в process.stdout внутри потока Worker. Если конструктору Worker не передан параметр stdout: true, данные направляются в поток process.stdout родительского потока.
threadId: number Целочисленный идентификатор указанного потока. Внутри потока Worker он доступен как import { threadId } from 'node:worker_threads'. Это значение уникально для каждого экземпляра Worker в пределах одного процесса.
Методы
addListener(
event: "error",
listener: (err: Error) => void,
): this addListener(
event: "exit",
listener: (exitCode: number) => void,
): this addListener(
event: "message",
listener: (value: any) => void,
): this addListener(
event: "messageerror",
listener: (error: Error) => void,
): this addListener(
event: "online",
listener: () => void,
): this addListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this emit(
event: "error",
err: Error,
): boolean emit(
event: "exit",
exitCode: number,
): boolean emit(
event: "message",
value: any,
): boolean emit(
event: "messageerror",
error: Error,
): boolean emit(event: "online"): boolean emit(
event: string | symbol,
...args: any[],
): boolean getHeapSnapshot(): Promise<Readable> Возвращает поток для чтения снимка V8 текущего состояния Worker. Подробности см. в v8.getHeapSnapshot().
Если поток Worker больше не работает (это может произойти до создания события 'exit' event), возвращённый Promise немедленно отклоняется с ошибкой ERR_WORKER_NOT_RUNNING.
off(
event: "error",
listener: (err: Error) => void,
): this off(
event: "exit",
listener: (exitCode: number) => void,
): this off(
event: "message",
listener: (value: any) => void,
): this off(
event: "messageerror",
listener: (error: Error) => void,
): this off(
event: "online",
listener: () => void,
): this off(
event: string | symbol,
listener: (...args: any[]) => void,
): this on(
event: "error",
listener: (err: Error) => void,
): this on(
event: "exit",
listener: (exitCode: number) => void,
): this on(
event: "message",
listener: (value: any) => void,
): this on(
event: "messageerror",
listener: (error: Error) => void,
): this on(
event: "online",
listener: () => void,
): this on(
event: string | symbol,
listener: (...args: any[]) => void,
): this once(
event: "error",
listener: (err: Error) => void,
): this once(
event: "exit",
listener: (exitCode: number) => void,
): this once(
event: "message",
listener: (value: any) => void,
): this once(
event: "messageerror",
listener: (error: Error) => void,
): this once(
event: "online",
listener: () => void,
): this once(
event: string | symbol,
listener: (...args: any[]) => void,
): this postMessage(
value: any,
transferList?: readonly TransferListItem[],
): void Отправляет сообщение Worker, которое принимается через require('node:worker_threads').parentPort.on('message'). Подробности см. в port.postMessage().
postMessageToThread(
threadId: number,
value: any,
timeout?: number,
): Promise<void> Отправляет значение другому Worker, указанному по идентификатору потока.
postMessageToThread(): Promise<void> prependListener(
event: "error",
listener: (err: Error) => void,
): this prependListener(
event: "exit",
listener: (exitCode: number) => void,
): this prependListener(
event: "message",
listener: (value: any) => void,
): this prependListener(
event: "messageerror",
listener: (error: Error) => void,
): this prependListener(
event: "online",
listener: () => void,
): this prependListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this prependOnceListener(
event: "error",
listener: (err: Error) => void,
): this prependOnceListener(
event: "exit",
listener: (exitCode: number) => void,
): this prependOnceListener(
event: "message",
listener: (value: any) => void,
): this prependOnceListener(
event: "messageerror",
listener: (error: Error) => void,
): this prependOnceListener(
event: "online",
listener: () => void,
): this prependOnceListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this ref(): void Противоположность unref(): вызов ref() для ранее unref()ed Worker не позволяет программе завершиться, если он является единственным оставшимся активным дескриптором (поведение по умолчанию). Если Worker уже ref()ed, повторный вызов ref() ничего не меняет.
removeListener(
event: "error",
listener: (err: Error) => void,
): this removeListener(
event: "exit",
listener: (exitCode: number) => void,
): this removeListener(
event: "message",
listener: (value: any) => void,
): this removeListener(
event: "messageerror",
listener: (error: Error) => void,
): this removeListener(
event: "online",
listener: () => void,
): this removeListener(
event: string | symbol,
listener: (...args: any[]) => void,
): this terminate(): Promise<number> Как можно скорее останавливает выполнение всего JavaScript в потоке Worker. Возвращает Promise с кодом завершения, который выполняется при создании события 'exit' event.
unref(): void Вызов unref() для Worker позволяет потоку завершиться, если он является единственным активным дескриптором в системе событий. Если Worker уже unref()ed, повторный вызов unref() ничего не меняет.
функция getEnvironmentData
Использование в Deno
import { getEnvironmentData } from "node:worker_threads";
getEnvironmentData(key: Serializable): SerializableВ потоке Worker функция worker.getEnvironmentData() возвращает копию данных, переданных в worker.setEnvironmentData() потока, создавшего Worker. Каждый новый Worker автоматически получает собственную копию данных окружения.
import {
Worker,
isMainThread,
setEnvironmentData,
getEnvironmentData,
} from 'node:worker_threads';
if (isMainThread) {
setEnvironmentData('Hello', 'World!');
const worker = new Worker(__filename);
} else {
console.log(getEnvironmentData('Hello')); // Prints 'World!'.
}
Параметры
key: Serializable Любое произвольное клонируемое значение JavaScript, которое можно использовать в качестве ключа {Map}.
Тип возвращаемого значения
функция isMarkedAsUntransferable
Использование в Deno
import { isMarkedAsUntransferable } from "node:worker_threads";
isMarkedAsUntransferable(object: object): booleanПроверяет, помечен ли объект как непередаваемый с помощью markAsUntransferable.
Параметры
object: object Тип возвращаемого значения
boolean функция markAsUncloneable
Использование в Deno
import { markAsUncloneable } from "node:worker_threads";
markAsUncloneable(object: object): voidПомечает объект как неклонируемый. Если object используется в качестве message при вызове port.postMessage(), возникает ошибка. Ничего не происходит, если object — примитивное значение.
Это не влияет на ArrayBuffer и объекты, подобные Buffer.
Эту операцию нельзя отменить.
const { markAsUncloneable } = require('node:worker_threads');
const anyObject = { foo: 'bar' };
markAsUncloneable(anyObject);
const { port1 } = new MessageChannel();
try {
// This will throw an error, because anyObject is not cloneable.
port1.postMessage(anyObject)
} catch (error) {
// error.name === 'DataCloneError'
}
В браузерах нет аналога этого API.
Параметры
object: object Тип возвращаемого значения
void функция markAsUntransferable
Использование в Deno
import { markAsUntransferable } from "node:worker_threads";
markAsUntransferable(object: object): voidЭтот символ не поддерживается.
Помечает объект как непередаваемый. Если object присутствует в списке передачи вызова port.postMessage(), он игнорируется.
Это особенно полезно для объектов, которые можно клонировать, а не передавать, и которые используются другими объектами на стороне отправителя. Например, Node.js помечает таким образом ArrayBuffer, используемые для Buffer pool.
Эту операцию нельзя отменить.
import { MessageChannel, markAsUntransferable } from 'node:worker_threads';
const pooledBuffer = new ArrayBuffer(8);
const typedArray1 = new Uint8Array(pooledBuffer);
const typedArray2 = new Float64Array(pooledBuffer);
markAsUntransferable(pooledBuffer);
const { port1 } = new MessageChannel();
port1.postMessage(typedArray1, [ typedArray1.buffer ]);
// The following line prints the contents of typedArray1 -- it still owns
// its memory and has been cloned, not transferred. Without
// `markAsUntransferable()`, this would print an empty Uint8Array.
// typedArray2 is intact as well.
console.log(typedArray1);
console.log(typedArray2);
В браузерах нет аналога этого API.
Параметры
object: object Тип возвращаемого значения
void функция moveMessagePortToContext
Использование в Deno
import { moveMessagePortToContext } from "node:worker_threads";
moveMessagePortToContext(
port: MessagePort,
contextifiedSandbox: Context,
): MessagePortЭтот символ не поддерживается.
Передаёт MessagePort в другой контекст vm. Исходный объект port становится непригодным для использования, а его место занимает возвращённый экземпляр MessagePort.
Возвращённый MessagePort — это объект в целевом контексте, наследующий от глобального класса Object. Объекты, переданные обработчику port.onmessage(), также создаются в целевом контексте и наследуют от его глобального класса Object.
Однако созданный MessagePort больше не наследует от EventTarget, и для получения событий через него можно использовать только port.onmessage().
Параметры
port: MessagePort Порт сообщений для передачи.
contextifiedSandbox: Context Объект contextified, возвращаемый методом vm.createContext().
Тип возвращаемого значения
функция receiveMessageOnPort
Использование в Deno
import { receiveMessageOnPort } from "node:worker_threads";
receiveMessageOnPort(port: MessagePort): { message: any; } | undefinedЭтот символ не поддерживается.
Получает одно сообщение из указанного MessagePort. Если сообщений нет, возвращается undefined, в противном случае возвращается объект с единственным свойством message, содержащим полезную нагрузку сообщения, соответствующую самому старому сообщению в очереди MessagePort.
import { MessageChannel, receiveMessageOnPort } from 'node:worker_threads';
const { port1, port2 } = new MessageChannel();
port1.postMessage({ hello: 'world' });
console.log(receiveMessageOnPort(port2));
// Prints: { message: { hello: 'world' } }
console.log(receiveMessageOnPort(port2));
// Prints: undefined
При использовании этой функции событие 'message' не генерируется, а обработчик onmessage не вызывается.
Параметры
port: MessagePort Тип возвращаемого значения
{ message: any; } | undefined функция setEnvironmentData
Использование в Deno
import { setEnvironmentData } from "node:worker_threads";
setEnvironmentData(
key: Serializable,
value: Serializable,
): voidAPI worker.setEnvironmentData() задаёт содержимое worker.getEnvironmentData() в текущем потоке и во всех новых экземплярах Worker, созданных в текущем контексте.
Параметры
key: Serializable Любое произвольное клонируемое значение JavaScript, которое можно использовать в качестве ключа {Map}.
value: Serializable Любое произвольное клонируемое значение JavaScript, которое будет клонировано и автоматически передано всем новым экземплярам Worker. Если value передано в качестве undefined, ранее заданное значение для key будет удалено.
Тип возвращаемого значения
void класс BroadcastChannel
Использование в Deno
import { BroadcastChannel } from "node:worker_threads";
Экземпляры BroadcastChannel обеспечивают асинхронную связь «один ко многим» со всеми остальными экземплярами BroadcastChannel, привязанными к тому же имени канала.
'use strict';
import {
isMainThread,
BroadcastChannel,
Worker,
} from 'node:worker_threads';
const bc = new BroadcastChannel('hello');
if (isMainThread) {
let c = 0;
bc.onmessage = (event) => {
console.log(event.data);
if (++c === 10) bc.close();
};
for (let n = 0; n < 10; n++)
new Worker(__filename);
} else {
bc.postMessage('hello from every worker');
bc.close();
}
Конструкторы
BroadcastChannel(name: string) Свойства
name: string onmessage: (message: unknown) => void Вызывается с единственным аргументом `MessageEvent` при получении сообщения.
onmessageerror: (message: unknown) => void Вызывается, если полученное сообщение не удаётся десериализовать.
Методы
close(): void Закрывает соединение BroadcastChannel.
postMessage(message: unknown): void интерфейс BroadcastChannel
переменная BroadcastChannel
Класс BroadcastChannel является глобальной ссылкой на import { BroadcastChannel } from 'worker_threads' https://nodejs.org/api/globals.html#broadcastchannel
Тип
globalThis extends { onmessage: any; BroadcastChannel: infer T; } ? T : _BroadcastChannel интерфейс ResourceLimits
Использование в Deno
import { type ResourceLimits } from "node:worker_threads";
Свойства
maxYoungGenerationSizeMb: number | undefined Максимальный размер области кучи для недавно созданных объектов.
maxOldGenerationSizeMb: number | undefined Максимальный размер основной кучи в МБ.
codeRangeSizeMb: number | undefined Размер предварительно выделенного диапазона памяти, используемого для сгенерированного кода.
stackSizeMb: number | undefined Максимальный размер стека потока по умолчанию. Небольшие значения могут привести к невозможности использования экземпляров Worker.
интерфейс WorkerOptions
Использование в Deno
import { type WorkerOptions } from "node:worker_threads";
Свойства
argv: any[] | undefined Список аргументов, которые будут преобразованы в строки и добавлены к process.argv в рабочем потоке. Это во многом аналогично workerData, но значения будут доступны в глобальном process.argv, как если бы они были переданы скрипту в качестве параметров командной строки.
eval: boolean | undefined workerData: any stdin: boolean | undefined stdout: boolean | undefined stderr: boolean | undefined execArgv: string[] | undefined resourceLimits: ResourceLimits | undefined transferList: TransferListItem[] | undefined Дополнительные данные для отправки в первом сообщении рабочего потока.
trackUnmanagedFds: boolean | undefined name: string | undefined Необязательное name, добавляемое к заголовку рабочего потока для отладки и идентификации; итоговый заголовок будет иметь вид [worker ${id}] ${name}.
интерфейс WorkerPerformance
Использование в Deno
import { type WorkerPerformance } from "node:worker_threads";
Свойства
псевдоним типа Serializable
Использование в Deno
import { type Serializable } from "node:worker_threads";
Определение
string
| object
| number
| boolean
| bigint
псевдоним типа TransferListItem
Использование в Deno
import { type TransferListItem } from "node:worker_threads";
Определение
переменная isInternalThread
Использование в Deno
import { isInternalThread } from "node:worker_threads";
Тип
boolean переменная isMainThread
Использование в Deno
import { isMainThread } from "node:worker_threads";
Тип
boolean переменная parentPort
Использование в Deno
import { parentPort } from "node:worker_threads";
Тип
null | MessagePort переменная resourceLimits
Использование в Deno
import { resourceLimits } from "node:worker_threads";
Тип
переменная SHARE_ENV
Использование в Deno
import { SHARE_ENV } from "node:worker_threads";
Тип
unique symbol переменная workerData
Использование в Deno
import { workerData } from "node:worker_threads";
Тип
any
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/worker_threads