跳转到内容

Worker Pool

createWorkerPool 提供了可自动伸缩的 Worker 线程池,支持任务队列和超时控制。

import { createWorkerPool } from "@ventostack/core";
const pool = createWorkerPool({
workerURL: "./worker.ts",
minWorkers: 2,
maxWorkers: 8,
taskTimeout: 10000,
});
// 提交任务
const result = await pool.execute({
type: "process-image",
payload: { url: "https://example.com/img.png" },
});
if (result.success) {
console.log("处理完成:", result.data);
}

Worker 脚本需监听 message 事件并返回 WorkerResult

worker.ts
self.onmessage = async (event) => {
const { type, payload } = event.data;
try {
const data = await processTask(type, payload);
self.postMessage({ success: true, data });
} catch (err) {
self.postMessage({ success: false, error: err.message });
}
};
pool.size(); // 当前 Worker 总数
pool.idle(); // 空闲 Worker 数量
pool.terminate(); // 终止所有 Worker 并清空队列
  • 任务提交时优先分配空闲 Worker
  • 无空闲 Worker 且未达 maxWorkers 时自动扩容
  • 超过 maxWorkers 的任务进入队列等待
  • 启动时预热 minWorkers 个 Worker
属性类型默认值说明
workerURLstring | URLWorker 脚本路径(必填)
minWorkersnumber1最小 Worker 数量
maxWorkersnumbernavigator.hardwareConcurrency || 4最大 Worker 数量
taskTimeoutnumber30000单个任务超时(毫秒)
方法说明
execute(task)提交任务,返回 WorkerResult
size()当前 Worker 总数
idle()空闲 Worker 数量
terminate()终止所有 Worker
类型属性说明
WorkerTasktype: string任务类型
WorkerTaskpayload: T任务载荷
WorkerResultsuccess: boolean是否成功
WorkerResultdata?: T返回数据
WorkerResulterror?: string错误信息