Сопрограмма модуля
Модуль управления параллелизмом
coroutine
Модуль предоставляет fiber
API для контроля порядка выполнения. Это позволяет разработчикам переключаться вручную fiber
, обеспечивая совместную многозадачность. coroutine
Важной функцией модуля является sleep
функция, которая позволяет выполняющемуся в данный момент fiber
модулю отказаться от процессора и позволить другим fiber
модулям работать.
Вот простой пример кода, демонстрирующий, как использовать coroutine
модуль:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16const coroutine = require('coroutine');
function foo() {
console.log('start foo');
coroutine.sleep(1000); // enter sleep mode
console.log('end foo');
}
function bar() {
console.log('start bar');
coroutine.sleep(2000);
console.log('end bar');
}
coroutine.start(foo);
coroutine.start(bar);
В приведенном выше коде мы определяем две функции foo
, а bar
затем используем coroutine.start
их для запуска обеих fiber
. В каждом из них fiber
мы используем coroutine.sleep
функцию, чтобы освободить процессор и позволить другим fiber
работать.
объект
Lock
заблокировать объект, см.Lock
1Lock coroutine.Lock;
Semaphore
семафорный объект, см.Semaphore
1Semaphore coroutine.Semaphore;
Condition
объект переменной условия, см.Condition
1Condition coroutine.Condition;
Event
объект события, см.Event
1Event coroutine.Event;
Worker
Рабочий объект независимого потока, см.Worker
1Worker coroutine.Worker;
статическая функция
start
Запускает волокно и возвращает объект волокна.
1
2static Fiber coroutine.start(Function func,
...args);
Параметры звонка:
- func: Функция, укажите функцию, выполняемую волокном.
- args: ..., переменная последовательность аргументов, которая будет передана функции внутри волокна
Результаты возврата:
- Fiber, возвращает объект волокна
parallel
Выполнить набор функций параллельно и дождаться возврата
1
2static Array coroutine.parallel(Array funcs,
Integer fibers = -1);
Параметры звонка:
- funcs: Массив, массив функций, выполняемых параллельно.
- fibers: целое число, ограничивает количество одновременных волокон, значение по умолчанию - -1, включает то же количество волокон, что и функции.
Результаты возврата:
- Array, возвращает массив результатов выполнения функции
Выполните функцию параллельно для обработки набора данных и дождитесь возврата
1
2
3static Array coroutine.parallel(Array datas,
Function func,
Integer fibers = -1);
Параметры звонка:
- datas: Массив, массив данных для параллельного выполнения
- func: Функция, функция, выполняемая параллельно.
- fibers: целое число, ограничивает количество одновременных волокон, значение по умолчанию - -1, включает то же количество волокон, что и данные.
Результаты возврата:
- Array, возвращает массив результатов выполнения функции
Выполнить функцию несколько раз параллельно и дождаться возврата
1
2
3static Array coroutine.parallel(Function func,
Integer num,
Integer fibers = -1);
Параметры звонка:
- func: Функция, количество функций, выполняемых параллельно.
- num: Целое число, количество повторяющихся задач.
- fibers: целое число, ограничивает количество одновременных волокон, значение по умолчанию - -1, включает то же количество волокон, что и функции.
Результаты возврата:
- Array, возвращает массив результатов выполнения функции
Выполнить набор функций параллельно и дождаться возврата
1static Array coroutine.parallel(...funcs);
Параметры звонка:
- funcs: ..., набор функций, выполняемых параллельно
Результаты возврата:
- Array, возвращает массив результатов выполнения функции
current
Возвращает текущее волокно
1static Fiber coroutine.current();
Результаты возврата:
- Fiber, текущий объект волокна
sleep
Приостановить текущее волокно на указанное время
1static coroutine.sleep(Integer ms = 0) async;
Параметры звонка:
- ms: целое число, указывает время паузы в миллисекундах, значение по умолчанию — 0, то есть операция будет возобновлена немедленно, когда появится время.
статические свойства
fibers
Массив, возвращает все работающие в данный момент оптоволоконные массивы.
1static readonly Array coroutine.fibers;
spareFibers
Целое число, запрос и установка простояFiberКоличество: когда дрожание сервера велико, время простоя можно соответствующим образом увеличитьFiberколичество. По умолчанию – 256.
1static Integer coroutine.spareFibers;
vmid
Целое число, запрос текущегоvmсерийный номер
1static readonly Integer coroutine.vmid;
loglevel
Целое число, измените и запросите этоvmУровень вывода используется для фильтрации выходной информации.console.NOTSET, вывести все
1static Integer coroutine.loglevel;