get-folder
Version:
High-Performance Folder Size Calculator.
49 lines (48 loc) • 1.45 kB
TypeScript
/**
* 简化的信号量类,用于控制并发数量
*
* 工作原理:
* 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;
}