/// <reference types="node" />
import * as cluster from "cluster";
import { IScheduler } from "./scheduler";
import { ITask } from "./task";
export interface IClusterSchedulerOptions {
    verbose?: boolean;
    maxAllocations?: number;
}
export interface IWorkerRecord {
    workerIndex: number;
    workerId: string;
    allocations: number;
    maxAllocations: number;
    worker: cluster.Worker;
}
export interface IWorkerMap {
    [index: string]: IWorkerRecord;
}
export interface ITaskRecord {
    inputs: any[];
    taskId: string;
    taskName: string;
    resolve: (result: any) => void;
    reject: (error: any) => void;
}
export interface ITaskMap {
    [index: string]: ITaskRecord;
}
export declare class ClusterScheduler implements IScheduler {
    private enableVerboseLogging;
    private maxAllocations;
    private numWorkers;
    private workers;
    private workerMap;
    private taskQueue;
    private pendingTasks;
    private whoami;
    constructor(numWorkers: number, options?: IClusterSchedulerOptions);
    init(mainFn: () => Promise<void>): Promise<void>;
    runTask(inputs: any[], task: ITask<any>): Promise<any>;
    private sendTask;
    private queueTask;
    private verbose;
    private trackWorker;
    private initWorker;
    private scheduleTask;
    private scheduleTasks;
    private shutdownWorkers;
}
