import { WorkerClient, type DWorker } from "./WorkerClient";
import type { IWorkerCodes } from "./createWorkerURL";
import type { Optional, AnyFunction } from "type-tls";
import { type DynamicWorkerOptions } from "./DynamicWorker";
import { SortQueue } from "./SortQueue";
import { Exec, ExecRecord } from "./dynamicWorkerAPI";
/**
 * worker 优先级比较器
 * @remarks
 * 按照 executingCount 的从小到大排列
 * @param a
 * @param b
 */
export declare function workerPriorityComparator<W extends AbstractWorker>(a: DWorker<W>, b: DWorker<W>): number;
/**
 * 动态Worker池
 */
export declare class DynamicWorkerPool<W extends AbstractWorker = Worker> extends WorkerClient<W> {
    /**
     *
     * @param workerNum - Worker池 中 workder 的个数
     * @param codeOrUrl - code 选项 或 url
     * @param workerOptions - Worker 相关的选项
     */
    constructor(workerNum: number, codeOrUrl?: Optional<IWorkerCodes | string>, workerOptions?: Optional<DynamicWorkerOptions<W>>);
    /**
     * Worker 队列
     */
    readonly queue: SortQueue<DWorker<W>>;
    get worker(): DWorker<W>;
    get executingCount(): number;
    execStarted(worker: DWorker<W>, execRec: ExecRecord): void;
    execEnded(worker: DWorker<W>): void;
    /**
     * 在指定 worker 中的执行命令
     *
     * @remarks
     * 当 worker 中成功执行，且 this 上没有对应的成员时，则会自动新增对应的成员方法
     *
     * @param exec - 命令信息
     * @param transfer - 传递给 Worker 的可传递对象。这些对象的所有权将被转移给 Worker，而发当前环境将不再保有所有权。
     * @returns
     */
    execCMDOnWorker(worker: DWorker<W>, exec: Exec, transfer?: Transferable[]): Promise<any>;
    /**
     * 在所有 worker 中的执行命令
     *
     * @remarks
     * 当 worker 中成功执行，且 this 上没有对应的成员时，则会自动新增对应的成员方法
     *
     * @param exec - 命令信息
     * @param transfer - 传递给 Worker 的可传递对象。这些对象的所有权将被转移给 Worker，而发当前环境将不再保有所有权。
     * @returns
     */
    allExecCMD(exec: Exec, transfer?: Transferable[]): Promise<any[]>;
    /**
     * 设置命令
     * @remarks
     * 会在Worker中添加一条命令，并且也会在实例自身上添加一个快捷命令（快捷方法 或 快捷属性）
     *
     * @param cmd
     * @param name - 命令的命名；默认会取 `cmd.name` 作为名字；当 cmd 是字符串时，name 是必须的
     * @param isProperty - 添加到实例自身的快捷命令是否作为属性；如果是 true，则会在实例自身上生成快捷属性
     * @returns
     */
    setCMD(cmd: string | AnyFunction, name?: Optional<string>, isProperty?: Optional<boolean>): Promise<boolean[]>;
    /**
     * 移除命令
     * @remarks
     * 会将 Worker 中的命令 和 自己实例上的对应快捷方法都给移除
     * @param name
     * @returns
     */
    removeCMD(name: string): Promise<boolean[]>;
}
//# sourceMappingURL=DynamicWorkerPool.d.ts.map