UNPKG

get-folder

Version:

High-Performance Folder Size Calculator.

49 lines (48 loc) 1.45 kB
/** * 简化的信号量类,用于控制并发数量 * * 工作原理: * 1. 维护一个固定数量的"令牌"(tokens) * 2. 每个并发操作需要先获取令牌才能执行 * 3. 没有令牌时,操作会被挂起等待 * 4. 操作完成后释放令牌,唤醒等待的操作 * * 这样确保同时运行的操作数量不会超过设定的并发限制, * 避免文件句柄耗尽、内存占用过高等问题 */ export declare class SimpleSemaphore { /** * 当前可用的令牌数量 */ private available; /** * 等待队列:存储等待令牌的 resolve 函数 */ private waiters; /** * 构造函数 * @param concurrency 最大并发数(令牌总数) */ constructor(concurrency: number); /** * 获取令牌(申请执行权限) * * 执行逻辑: * 1. 如果有可用令牌,立即获取并返回 * 2. 如果没有令牌,创建 Promise 并加入等待队列 * 3. 当前操作会被挂起,直到有令牌释放时被唤醒 * * @returns Promise<void> 当获得令牌时 resolve */ acquire(): Promise<void>; /** * 释放令牌(归还执行权限) * * 执行逻辑: * 1. 优先唤醒等待队列中的第一个等待者 * 2. 如果没有等待者,增加可用令牌数 * * 这样确保令牌总数始终保持不变 */ release(): void; }