模組coroutine
並發控制模組
coroutine
模組提供了一個用於控制fiber
執行順序的API。它允許開發者手動切換fiber
,從而實現協作式多任務。coroutine
模組的一個重要的函數是sleep
函數,它允許目前正在執行的fiber
讓出CPU,讓其他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
函數來讓出CPU,讓其他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: Function, 制定纖程執行的函數
- args: ..., 可變參數序列,此序列會在纖程內傳遞給函數
回傳結果:
- Fiber, 返回纖程對象
parallel
並行執行一組函數,並等待返回
1
2static Array coroutine.parallel(Array funcs,
Integer fibers = -1);
呼叫參數:
- funcs: Array, 並行執行的函數數組
- fibers: Integer, 限制併發fiber 數量,預設為-1,啟用與funcs 數量相同fiber
回傳結果:
- Array, 傳回函數執行結果的陣列
並行執行一個函數處理一組數據,並等待返回
1
2
3static Array coroutine.parallel(Array datas,
Function func,
Integer fibers = -1);
呼叫參數:
- datas: Array, 並行執行的資料數組
- func: Function, 並行執行的函數
- fibers: Integer, 限制並發fiber 數量,預設為-1,啟用與datas 數量相同fiber
回傳結果:
- Array, 傳回函數執行結果的陣列
並行執行一個函數多次,並等待返回
1
2
3static Array coroutine.parallel(Function func,
Integer num,
Integer fibers = -1);
呼叫參數:
- func: Function, 平行執行的函數數
- num: Integer, 重複任務數量
- fibers: Integer, 限制併發fiber 數量,預設為-1,啟用與funcs 數量相同fiber
回傳結果:
- Array, 傳回函數執行結果的陣列
並行執行一組函數,並等待返回
1static Array coroutine.parallel(...funcs);
呼叫參數:
- funcs: ..., 一組平行執行的函數
回傳結果:
- Array, 傳回函數執行結果的陣列
current
返回目前纖程
1static Fiber coroutine.current();
回傳結果:
- Fiber, 目前纖程對象
sleep
暫停目前纖程指定的時間
1static coroutine.sleep(Integer ms = 0) async;
呼叫參數:
- ms: Integer, 指定要暫停的時間,以毫秒為單位,缺省為0,即有空閒立即回恢復運行
靜態屬性
fibers
Array, 傳回目前正在運行的全部fiber 數組
1static readonly Array coroutine.fibers;
spareFibers
Integer, 查詢和設定空閒Fiber數量,伺服器抖動較大時可適度增加空閒Fiber數量。缺省為256
1static Integer coroutine.spareFibers;
vmid
Integer, 查詢目前vm編號
1static readonly Integer coroutine.vmid;
loglevel
Integer, 修改和查詢本vm的輸出級別,用以過濾輸出訊息,缺省為console.NOTSET,全部輸出
1static Integer coroutine.loglevel;