🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Go 风格协程池 snow-The/dsh-goroutine

DeepSeek Harness
snow-The53 天前有提交已提供中文文档扫描:未发现敏感能力

在 JS 运行时用 goroutine 与 channel 跑并发任务

29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add snow-The/dsh-goroutine
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 53 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@snow-the/goroutine(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.13 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 00:11:56

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • channel通信
  • worker池

README

由 DeepSeek 最新模型翻译生成
@snow-the/goroutine Go 的并发词汇,用于 JS 运行时——goroutine、channel、WaitGroup 和 errgroup——仅构建在 node:worker_threads 之上,因此同一份代码可在 Node、 Deno 以及(从构造上而言)Bun 上运行。没有原生插件,没有 AsyncResource,没有阻塞式等待。 import { Pool, go, WaitGroup, Group, Channel, parallel } from '@snow-the/goroutine'; const pool = new Pool({ size: 4 }); // worker 线程(“M”) await pool.run('./jobs.mjs', 'parseLog', [path]); // 模块通道:无 eval,导入可用 await pool.spawn(() => heavyMath()); // 内联通道:goroutine 手感(无闭包) const ch = new Channel(16); // 带缓冲;0 = 会合 const wg = new WaitGroup();
展开完整文档(README 剩余 1 节)
@snow-the/goroutine

Go 的并发词汇,用于 JS 运行时——goroutine、channel、WaitGroup 和 errgroup——仅构建在 node:worker_threads 之上,因此同一份代码可在 Node、 Deno 以及(从构造上而言)Bun 上运行。没有原生插件,没有 AsyncResource,没有阻塞式等待。

import { Pool, go, WaitGroup, Group, Channel, parallel } from '@snow-the/goroutine';

const pool = new Pool({ size: 4 }); // worker 线程(“M”) await pool.run('./jobs.mjs', 'parseLog', [path]); // 模块通道:无 eval,导入可用
await pool.spawn(() => heavyMath()); // 内联通道:goroutine 手感(无闭包)

const ch = new Channel(16); // 带缓冲;0 = 会合 const wg = new WaitGroup();
for (const file of files) wg.go(() => pool.run('./jobs.mjs', 'hash', [file]));
await wg.wait();
for await (const value of ch) { / for v := range ch / }

const group = new Group(); // errgroup:首个错误取消其余任务
group.go(() => fetchA(group.signal));
group.go(() => fetchB(group.signal));
await group.wait();

await pool.shutdown({ timeout: 5000 });
async function heavyMath() { return 6 7; }

API

| 导出 | 说明 |
| Pool | 有界 worker 池:run(模块通道)、spawn(内联通道)、drain、shutdown、stats;选项 size/minThreads/maxQueue/overflow/idleTimeout/concurrentTasksPerWorker/retryOnCrash |
| Channel | Go channel:带缓冲环形队列、FIFO 发送者/接收者、send/recv/trySend/tryRecv/close、可异步迭代 |
| WaitGroup | add/done/wait 外加 go(fn)(Go 1.25 的 WaitGroup.Go) |
| Group | errgroup:go(fn)、signal,首个错误胜出并中止同级任务 |
| go(fn) | 微通道即发即忘(面向 IO 型工作的“go func()”) |
| parallel | 对列表进行有界扇出,结果按输入顺序返回 |
| sleep | 可中止的 sleep |

运行时矩阵(本仓库的测试套件,17 个测试)

| 运行时 | 结果 |
| Node v26.7.0(npm test) | 17/17 通过 |
| Deno 2.4.4(deno test --no-check --allow-read --allow-env test/) | 17/17 通过 |

Bun 注意事项:裸 bun test 还会收集被 git 忽略的、位于 ref/piscina/ 下的研究检出,其测试期望一个并不存在的构建产物。请运行
bun test ./test 来执行本库自身的测试套件。
| Bun 1.4.2(bun test ./test) | 17/17 通过(已于 2026-09-11 验证) |

设计

参见 DESIGN.md,了解 Go→JS 的映射(G/M/P、hchan、sync.WaitGroup、 sync.Pool)、从 piscina 采纳了什么、有意拒绝了什么,以及兼容性规则。所研究的源码检出在 ref/ 下(被 git 忽略): ref/piscina 和 ref/go(稀疏:src/runtime + src/sync)。

测量改变了什么

调度器的工作由数字驱动,而非感觉(见 RESEARCH-scheduling.md):

批量派发曾实现,随后被删除——它让每种工作负载都变慢了(2000 个微小任务:4 个 worker 上 38.5 ms -> 97.7 ms,1 个 worker 上 74.6 ms -> 348 ms)。Go 采用批处理以避免每个 P 的队列锁竞争;这个池只有一个共享队列和约 20 µs 的调度开销,因此批处理只会牺牲并行性。
* 它暴露出的真正 bug 已被修复:overflow: 'wait' 的生产者以
setTimeout(1) 挂起,将突发限制在约 1 个任务/ms。生产者现在挂起在等待者队列上,
并由释放空间的出队操作唤醒——2000 个微小任务从 74.6 ms -> 48 ms (1 个 worker)以及 38.5 ms -> 29.4 ms(4 个 worker)。

尖锐边缘(已记录,而非隐藏)

* JS 无法抢占:每个“goroutine”在 await 边界处都是协作式的。
* pool.spawn(fn) 将 fn.toString() 发送到 worker——闭包不会捕获。
当你需要导入或捕获状态时,请使用模块通道。
* 任务参数和结果必须可结构化克隆;传递 { transfer: [...] } 以实现零拷贝的 ArrayBuffer 交接。
预览分享卡片长什么样 ↓snow-The/dsh-goroutine
分享 · DeepSeek Harness Hub
snow-The/dsh-goroutine

在 JS 运行时用 goroutine 与 channel 跑并发任务

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部