Module 基礎模組

模組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 16
const 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);

在上面的程式碼中,我們定義了兩個函數foobar,然後使用coroutine.start函數啟動兩個fiber。在每個fiber中,我們使用coroutine.sleep函數來讓出CPU,讓其他fiber運作。

物件

Lock

鎖對象,參見Lock

1
Lock coroutine.Lock;

Semaphore

信號量對象,參見Semaphore

1
Semaphore coroutine.Semaphore;

Condition

條件變數對象,參見Condition

1
Condition coroutine.Condition;

Event

事件對象,參見Event

1
Event coroutine.Event;

Worker

獨立線程工作對象,參見Worker

1
Worker coroutine.Worker;

靜態函數

start

啟動一個纖程並返回纖程對象

1 2
static Fiber coroutine.start(Function func, ...args);

呼叫參數:

  • func: Function, 制定纖程執行的函數
  • args: ..., 可變參數序列,此序列會在纖程內傳遞給函數

回傳結果:

  • Fiber, 返回纖程對象

parallel

並行執行一組函數,並等待返回

1 2
static Array coroutine.parallel(Array funcs, Integer fibers = -1);

呼叫參數:

  • funcs: Array, 並行執行的函數數組
  • fibers: Integer, 限制併發fiber 數量,預設為-1,啟用與funcs 數量相同fiber

回傳結果:

  • Array, 傳回函數執行結果的陣列

並行執行一個函數處理一組數據,並等待返回

1 2 3
static Array coroutine.parallel(Array datas, Function func, Integer fibers = -1);

呼叫參數:

  • datas: Array, 並行執行的資料數組
  • func: Function, 並行執行的函數
  • fibers: Integer, 限制並發fiber 數量,預設為-1,啟用與datas 數量相同fiber

回傳結果:

  • Array, 傳回函數執行結果的陣列

並行執行一個函數多次,並等待返回

1 2 3
static Array coroutine.parallel(Function func, Integer num, Integer fibers = -1);

呼叫參數:

  • func: Function, 平行執行的函數數
  • num: Integer, 重複任務數量
  • fibers: Integer, 限制併發fiber 數量,預設為-1,啟用與funcs 數量相同fiber

回傳結果:

  • Array, 傳回函數執行結果的陣列

並行執行一組函數,並等待返回

1
static Array coroutine.parallel(...funcs);

呼叫參數:

  • funcs: ..., 一組平行執行的函數

回傳結果:

  • Array, 傳回函數執行結果的陣列

current

返回目前纖程

1
static Fiber coroutine.current();

回傳結果:

  • Fiber, 目前纖程對象

sleep

暫停目前纖程指定的時間

1
static coroutine.sleep(Integer ms = 0) async;

呼叫參數:

  • ms: Integer, 指定要暫停的時間,以毫秒為單位,缺省為0,即有空閒立即回恢復運行

靜態屬性

fibers

Array, 傳回目前正在運行的全部fiber 數組

1
static readonly Array coroutine.fibers;

spareFibers

Integer, 查詢和設定空閒Fiber數量,伺服器抖動較大時可適度增加空閒Fiber數量。缺省為256

1
static Integer coroutine.spareFibers;

vmid

Integer, 查詢目前vm編號

1
static readonly Integer coroutine.vmid;

loglevel

Integer, 修改和查詢本vm的輸出級別,用以過濾輸出訊息,缺省為console.NOTSET,全部輸出

1
static Integer coroutine.loglevel;