Skip to content

主线程调度器 ​

主线程调度器(MainThreadDispatcher)用于控制回调执行时机,实现批量处理和限流。

使用场景 ​

  • 控制执行时机,在主循环中批量处理回调
  • 防止大量回调堆积导致事件循环阻塞
  • 与其他语言 SDK 保持一致的抽象接口

基本用法 ​

typescript
import { getDispatcher } from "croupier-js-sdk/threading";

const dispatcher = getDispatcher();
dispatcher.initialize();
dispatcher.enqueue(() => processResponse(data));

function mainLoop() {
  dispatcher.processQueue();
  setImmediate(mainLoop);
}

常用接口 ​

  • initialize()
  • enqueue(callback)
  • enqueueDeferred(callback)
  • processQueue()
  • processQueueWithLimit(maxCount)
  • getPendingCount()
  • setMaxProcessPerFrame(max)
  • clear()

入站并发与背压 ​

入站请求(Agent→SDK 的 Invoke 等)由有界 worker 池处理: 读循环只投递不执行业务(串行处理会让一个慢 handler 卡住整条连接)。

  • 默认 worker 数 ≈ CPU 核数;待处理队列容量 ≈ workers × 4(突发吸收 4 轮满载)
  • 业务队列打满时立即回 busy 错误帧(inbound queue full, retry on another instance),Agent 侧 failover 换实例重试——SDK 内存不积累
  • 调优入口在 transport 层配置(Go:InboundWorkers/InboundQLen; 其他语言见各自配置章节),语义六语言一致

控制消息(心跳/注册/drain)的双车道隔离目前仅 Go 落地:控制请求走 专用队列永不 reject,业务洪峰时会话仍存活(protocol.IsControlRequest() 分类)。其余语言心跳与业务共用车道,待按 Go 基准迁移。