/**
 * 비동기 처리 최적화 서비스
 * 워커 풀, 큐 시스템, 배치 처리 최적화
 */
import type { IAsyncTaskQueue } from '../shared/interfaces/async-task-queue.interface.js';
export interface Task<T = unknown> {
    id: string;
    type: string;
    data: T;
    priority: number;
    createdAt: Date;
    maxRetries: number;
    retryCount: number;
    timeout: number;
}
export interface TaskResult<T = unknown> {
    taskId: string;
    success: boolean;
    data?: T;
    error?: string;
    executionTime: number;
    retryCount: number;
}
export interface QueueStats {
    pending: number;
    processing: number;
    completed: number;
    failed: number;
    totalProcessed: number;
    averageProcessingTime: number;
    throughput: number;
}
export declare class AsyncTaskQueue implements IAsyncTaskQueue {
    private queue;
    private processing;
    private completed;
    private failed;
    private workers;
    private maxWorkers;
    private maxQueueSize;
    private running;
    private stats;
    constructor(maxWorkers?: number, maxQueueSize?: number | null);
    /**
     * 작업 추가
     */
    addTask<T>(task: Omit<Task<T>, 'id' | 'createdAt' | 'retryCount'> & {
        id?: string;
    }): string | false;
    /**
     * 작업 처리 시작
     */
    start(): Promise<boolean>;
    /**
     * 작업 처리 중지
     */
    stop(): Promise<boolean>;
    /**
     * 다음 작업 처리 - 최적화된 버전
     */
    private processNext;
    /**
     * 배치 처리 - 여러 작업을 동시에 처리
     */
    private processNextBatch;
    /**
     * 작업 결과 가져오기
     */
    getResult(taskId: string): TaskResult | null;
    /**
     * 작업 상태 확인
     */
    getTaskStatus(taskId: string): 'pending' | 'processing' | 'completed' | 'failed' | null;
    /**
     * 통계 반환
     */
    getStats(): QueueStats;
    /**
     * 통계 업데이트
     */
    private updateStats;
    /**
     * 작업 완료 처리
     */
    onTaskCompleted(taskId: string, result: TaskResult): void;
    /**
     * 작업 실패 처리
     */
    onTaskFailed(taskId: string, result: TaskResult): void;
    /**
     * 다음 작업 가져오기
     */
    getNextTask(): Task | null;
    /**
     * 실행 상태 확인
     */
    isRunning(): boolean;
    /**
     * 작업 취소
     */
    cancelTask(taskId: string): boolean;
    /**
     * 모든 대기 중인 작업 제거
     */
    clear(): void;
    /**
     * 완료된 작업 목록 반환
     */
    getCompletedTasks(): TaskResult[];
    /**
     * 실패한 작업 목록 반환
     */
    getFailedTasks(): TaskResult[];
    /**
     * 작업 재시도
     */
    retryTask(taskId: string): boolean;
    /**
     * 큐 길이 반환
     */
    getQueueLength(): number;
    /**
     * 큐가 비어있는지 확인
     */
    isQueueEmpty(): boolean;
    /**
     * 처리 중인 작업 목록 반환
     */
    getProcessingTasks(): Task[];
    /**
     * ID로 작업 찾기
     */
    getTaskById(taskId: string): Task | null;
    /**
     * 타입별 작업 찾기
     */
    getTasksByType(type: string): Task[];
    /**
     * 우선순위별 작업 찾기
     */
    getTasksByPriority(priority: number): Task[];
}
/**
 * 배치 처리 최적화 서비스
 */
export declare class BatchProcessor {
    private batchSize;
    private flushInterval;
    private batches;
    private timers;
    constructor(batchSize?: number, flushInterval?: number);
    /**
     * 배치에 항목 추가
     */
    addToBatch<T>(batchKey: string, item: T): void;
    /**
     * 배치 플러시
     */
    private flushBatch;
    /**
     * 배치 처리 구현
     */
    private processBatch;
    /**
     * 메모리 배치 처리
     */
    private processMemoryBatch;
    /**
     * 임베딩 배치 처리
     */
    private processEmbeddingBatch;
    /**
     * 검색 캐시 배치 처리
     */
    private processSearchCacheBatch;
    /**
     * 플러시 타이머 설정
     */
    private setFlushTimer;
    /**
     * 모든 배치 강제 플러시
     */
    flushAll(): Promise<void>;
    /**
     * 배치 상태 반환
     */
    getBatchStats(): Record<string, {
        size: number;
        lastFlush: Date;
    }>;
}
//# sourceMappingURL=async-optimizer.d.ts.map