Объектворкер
Объект Worker — это объект, используемый для создания дочерних потоков, которые можно создавать и обрабатывать в программе. Объект Worker можно понимать как процесс JavaScript, который выполняется в потоке, отличном от основного потока. Worker не разделяет память с основным потоком и не блокирует основной поток.Это основной метод асинхронного программирования.
Конструктор объекта Worker выглядит следующим образом:
1new Worker(String path, Object opts = {})
в,pathПараметр указывает путь к файлу JavaScript нового потока. Например, вы можете написать файл work.js следующего содержания:
1
2
3
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
В основной программе запустите work.js со следующим кодом:
1
2
3
4const {
Worker
} = require('worker_threads');
const worker = new Worker('path/to/work.js');
После запуска вы можете увидеть вывод «Привет от работника» на консоли основной программы.
В следующем примере предположим, что у нас есть длительное вычисление, и мы хотим поместить его в другой поток для обработки, не блокируя это вычисление в основном потоке. код показан ниже:
Основная тема:
1
2
3
4
5
6
7
8
9
10
11
12const {
Worker
} = require('worker_threads');
// create a worker thread
const fib = new Worker(__dirname + '/fib-worker.js');
// receive the result from the worker thread
fib.onmessage = (ev) => {
console.log('result: ', ev.data);
};
fib.postMessage(40);
console.log('main thread still working');
В этом примере мы создаем рабочий поток через конструктор объекта Worker для обработки расчета последовательности Фибоначчи. Основной поток передает данные в рабочий поток через метод postMessage() и получает результаты обработки через событие onmessage. . В то же время основной поток отображает сообщение «все еще работает», чтобы доказать, что эта вычислительная задача была «делегирована» рабочему потоку и может продолжать обрабатывать другие задачи.
Стиль кода рабочего потока следующий:
1
2
3
4
5
6
7
8
9
10
11
12// fib-worker.js
Master.onmessage = (ev) => {
const n = ev.data;
const result = fib(n);
// Once the calculation has been completed, the result is sent back to the main thread.
Master.postMessage(result);
};
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
В рабочем потоке мы прослушивали сообщения, отправленные основным потоком, через входной параметр postMessage(), вычисляли указанную последовательность Фибоначчи и отправляли результаты расчета обратно в основной поток через метод Master.postMessage().
Это самый простой пример Worker. При разработке с использованием объектов Worker основной поток и рабочий поток полностью асинхронны. Каждый объект Worker представляет собой отдельный поток. Объект Worker, созданный в основном потоке, не будет генерировать какой-либо блок.
отношения наследства
Конструктор
Worker
Конструктор рабочего объекта
1
2new Worker(String path,
Object opts = {});
Параметры звонка:
- path: строка, указывает сценарий входа Worker, принимает только абсолютные пути.
- opts: Объект, вариант строительства, пока не поддерживается
статические свойства
defaultMaxListeners
Целое число, глобальное максимальное количество слушателей по умолчанию.
1static Integer Worker.defaultMaxListeners;
свойства члена
onload
Функция, запрос и привязка принимают событие сообщения о загрузке, которое эквивалентно on("load", func);
1Function Worker.onload;
onmessage
Функция, запрос и привязка принимают события сообщения postMessage, эквивалентные on("message", func);
1Function Worker.onmessage;
onerror
Функция, запрос и привязка принимают события сообщения об ошибке, эквивалентные on("error", func);
1Function Worker.onerror;
функция-член
postMessage
Отправьте сообщение Мастеру или Работнику,
1Worker.postMessage(Value data);
Параметры звонка:
- data: Значение, указывает содержимое отправленного сообщения.
on
Привязать обработчик событий к объекту
1
2Object Worker.on(String ev,
Function func);
Параметры звонка:
- ev: строка, указывает название события.
- func: Функция, укажите функцию обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Привязать обработчик событий к объекту
1Object Worker.on(Object map);
Параметры звонка:
- map: Объект, определяет связь сопоставления событий, имя атрибута объекта будет использоваться в качестве имени события, а значение атрибута будет использоваться в качестве функции обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
addListener
Привязать обработчик событий к объекту
1
2Object Worker.addListener(String ev,
Function func);
Параметры звонка:
- ev: строка, указывает название события.
- func: Функция, укажите функцию обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Привязать обработчик событий к объекту
1Object Worker.addListener(Object map);
Параметры звонка:
- map: Объект, определяет связь сопоставления событий, имя атрибута объекта будет использоваться в качестве имени события, а значение атрибута будет использоваться в качестве функции обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
prependListener
Привяжите обработчик событий к источнику объекта
1
2Object Worker.prependListener(String ev,
Function func);
Параметры звонка:
- ev: строка, указывает название события.
- func: Функция, укажите функцию обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Привяжите обработчик событий к источнику объекта
1Object Worker.prependListener(Object map);
Параметры звонка:
- map: Объект, определяет связь сопоставления событий, имя атрибута объекта будет использоваться в качестве имени события, а значение атрибута будет использоваться в качестве функции обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
once
Привяжите к объекту одноразовый обработчик событий. Одноразовый обработчик будет срабатывать только один раз.
1
2Object Worker.once(String ev,
Function func);
Параметры звонка:
- ev: строка, указывает название события.
- func: Функция, укажите функцию обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Привяжите к объекту одноразовый обработчик событий. Одноразовый обработчик будет срабатывать только один раз.
1Object Worker.once(Object map);
Параметры звонка:
- map: Объект, определяет связь сопоставления событий, имя атрибута объекта будет использоваться в качестве имени события, а значение атрибута будет использоваться в качестве функции обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
prependOnceListener
Привяжите обработчик событий к источнику объекта
1
2Object Worker.prependOnceListener(String ev,
Function func);
Параметры звонка:
- ev: строка, указывает название события.
- func: Функция, укажите функцию обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Привяжите обработчик событий к источнику объекта
1Object Worker.prependOnceListener(Object map);
Параметры звонка:
- map: Объект, определяет связь сопоставления событий, имя атрибута объекта будет использоваться в качестве имени события, а значение атрибута будет использоваться в качестве функции обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
off
Отменить назначение функции из очереди обработки объекта
1
2Object Worker.off(String ev,
Function func);
Параметры звонка:
- ev: строка, указывает название события.
- func: Функция, укажите функцию обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Отменить все функции в очереди обработки объекта
1Object Worker.off(String ev);
Параметры звонка:
- ev: строка, указывает название события.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Отменить назначение функции из очереди обработки объекта
1Object Worker.off(Object map);
Параметры звонка:
- map: Объект, определяет связь сопоставления событий, имя атрибута объекта используется в качестве имени события, а значение атрибута используется в качестве функции обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
removeListener
Отменить назначение функции из очереди обработки объекта
1
2Object Worker.removeListener(String ev,
Function func);
Параметры звонка:
- ev: строка, указывает название события.
- func: Функция, укажите функцию обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Отменить все функции в очереди обработки объекта
1Object Worker.removeListener(String ev);
Параметры звонка:
- ev: строка, указывает название события.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Отменить назначение функции из очереди обработки объекта
1Object Worker.removeListener(Object map);
Параметры звонка:
- map: Объект, определяет связь сопоставления событий, имя атрибута объекта используется в качестве имени события, а значение атрибута используется в качестве функции обработки событий.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
removeAllListeners
Отменяет все прослушиватели всех событий из очереди обработки объекта. Если событие указано, удаляются все прослушиватели указанного события.
1Object Worker.removeAllListeners(String ev);
Параметры звонка:
- ev: строка, указывает название события.
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
Отменяет все прослушиватели всех событий из очереди обработки объекта. Если событие указано, удаляются все прослушиватели указанного события.
1Object Worker.removeAllListeners(Array evs = []);
Параметры звонка:
- evs: Массив, укажите название события
Результаты возврата:
- Object, возвращает сам объект события для облегчения цепных вызовов
setMaxListeners
Ограничение количества прослушивателей по умолчанию, только для совместимости.
1Worker.setMaxListeners(Integer n);
Параметры звонка:
- n: Целое число, укажите количество событий
getMaxListeners
Получает предельное количество прослушивателей по умолчанию, только для совместимости.
1Integer Worker.getMaxListeners();
Результаты возврата:
- Integer, возвращает лимитируемое количество по умолчанию
listeners
Запросить массив прослушивателей для указанного события объекта
1Array Worker.listeners(String ev);
Параметры звонка:
- ev: строка, указывает название события.
Результаты возврата:
- Array, возвращает массив прослушивателей для указанного события
listenerCount
Запрос количества прослушивателей для указанного события объекта
1Integer Worker.listenerCount(String ev);
Параметры звонка:
- ev: строка, указывает название события.
Результаты возврата:
- Integer, возвращает количество прослушивателей указанного события
Запрос количества прослушивателей для указанного события объекта
1
2Integer Worker.listenerCount(Value o,
String ev);
Параметры звонка:
- o: Значение, указывает объект запроса.
- ev: строка, указывает название события.
Результаты возврата:
- Integer, возвращает количество прослушивателей указанного события
eventNames
Имя события прослушивателя запроса
1Array Worker.eventNames();
Результаты возврата:
- Array, возвращает массив имен событий
emit
Активно запускать событие
1
2Boolean Worker.emit(String ev,
...args);
Параметры звонка:
- ev: строка, имя события
- args: ..., параметры события будут переданы в функцию обработки событий
Результаты возврата:
- Boolean, возвращает статус триггера события, возвращает true, если есть ответное событие, в противном случае возвращает false
toString
Возвращает строковое представление объекта. Обычно возвращается «[Native Object]». Объект может быть повторно реализован в соответствии с его собственными характеристиками.
1String Worker.toString();
Результаты возврата:
- String, возвращает строковое представление объекта
toJSON
Возвращает представление объекта в формате JSON, обычно возвращая коллекцию читаемых свойств, определенных объектом.
1Value Worker.toJSON(String key = "");
Параметры звонка:
- key: Строка, не используется.
Результаты возврата:
- Value, возвращает значение, содержащее сериализуемый JSON