/** * WorkerPool 클래스 * 워커 풀 관리 및 태스크 처리를 담당합니다. */ import { EventEmitter } from "eventemitter3"; import { Task, TaskStatus, TaskPriority } from "../types/index.js"; import { EventStream } from "./event-stream.js"; import { StreamOptions } from "../types/stream.js"; /** * WorkerPool 설정 인터페이스 */ export interface WorkerPoolConfig { /** 최소 워커 수 */ minWorkers?: number; /** 최대 워커 수 */ maxWorkers?: number; /** 워커 유휴 타임아웃 (ms) */ idleTimeout?: number; /** 워커 URL (웹 환경) */ workerUrl?: string | ((type: string) => string); /** 워커 파일 경로 (Node.js 환경) */ workerFile?: string | ((type: string) => string); /** 워커 옵션 */ workerOptions?: any; /** 태스크 제한 시간 (ms) */ taskTimeout?: number; /** 태스크 폴링 간격 (ms) */ taskPollingInterval?: number; /** 통계 업데이트 간격 (ms) */ statsUpdateInterval?: number; /** 로깅 활성화 여부 */ enableLogging?: boolean; /** 메모리 임계치 (MB) */ memoryThreshold?: number; /** CPU 임계치 (%) */ cpuThreshold?: number; /** 리소스 모니터링 간격 (ms) */ resourceMonitorInterval?: number; /** 동적 스케일링 활성화 여부 */ enableDynamicScaling?: boolean; /** 스케일 업 임계치 (%) */ scaleUpThreshold?: number; /** 스케일 다운 임계치 (%) */ scaleDownThreshold?: number; /** 태스크 우선순위 기반 리소스 할당 활성화 여부 */ enablePriorityBasedAllocation?: boolean; /** 고우선순위 태스크 리소스 할당 비율 (%) */ highPriorityResourceRatio?: number; } /** * 워커 풀 통계 인터페이스 */ export interface WorkerPoolStats { /** 총 워커 수 */ totalWorkers: number; /** 활성 워커 수 */ activeWorkers: number; /** 유휴 워커 수 */ idleWorkers: number; /** 대기 중인 태스크 수 */ pendingTasks: number; /** 실행 중인 태스크 수 */ runningTasks: number; /** 완료된 태스크 수 */ completedTasks: number; /** 실패한 태스크 수 */ failedTasks: number; /** 취소된 태스크 수 */ cancelledTasks: number; /** 총 처리된 태스크 수 */ totalProcessedTasks: number; /** 평균 태스크 처리 시간 (ms) */ avgTaskDuration: number; } /** * 태스크 옵션 인터페이스 */ export interface TaskOptions { /** 태스크 ID */ id?: string; /** 태스크 우선순위 */ priority?: TaskPriority; /** 태스크 타임아웃 (ms) */ timeout?: number; /** 워커 유형 */ workerType?: string; /** 최대 재시도 횟수 */ maxRetries?: number; /** 진행 상태 콜백 */ onProgress?: (progress: any) => void; } /** * WorkerPool 클래스 * 워커 풀과 태스크 큐를 관리하는 주요 클래스 */ export declare class WorkerPool extends EventEmitter { /** 태스크 큐 */ private taskQueues; /** 워커 매니저 */ private workerManager; /** 이벤트 허브 */ private eventHub; /** 실행 중인 태스크 */ private runningTasks; /** 태스크 해결자 */ private taskResolvers; /** 워커 풀 설정 */ private config; /** 폴링 인터벌 ID */ private pollingIntervalId?; /** 통계 인터벌 ID */ private statsIntervalId?; /** 통계 정보 */ private stats; /** 태스크 소요 시간 기록 */ private taskDurations; /** 워커 풀이 종료되었는지 여부 */ private isShutdown; /** 스트림 매니저 */ private streamManager; /** 리소스 모니터링 타이머 */ private resourceMonitorTimer; /** 리소스 사용량 통계 */ private resourceStats; /** * WorkerPool 생성자 * @param config 워커 풀 설정 */ constructor(config?: Partial); /** * 이벤트 허브 설정 */ private setupEventHub; /** * 이벤트 리스너 설정 */ private setupEventListeners; /** * 워커 ID로 태스크 찾기 * @param workerId 워커 ID */ private findTaskByWorkerId; /** * 태스크 폴링 시작 */ private startTaskPolling; /** * 통계 업데이트 시작 */ private startStatsUpdates; /** * 리소스 모니터링 시작 */ private startResourceMonitoring; /** * 리소스 사용량 모니터링 */ private monitorResources; /** * 리소스 사용량 조회 */ private getResourceUsage; /** * 리소스 임계치 체크 */ private checkResourceThresholds; /** * 워커 수 동적 조정 */ private adjustWorkerCount; /** * 우선순위 기반 리소스 할당 */ private allocateResourcesByPriority; /** * 대기 중인 태스크 처리 */ private processPendingTasks; /** * 태스크 처리 * @param worker 워커 인스턴스 * @param task 태스크 */ private processTask; /** * 워커에 메시지 전송 * @param workerId 워커 ID * @param message 메시지 */ private sendMessageToWorker; /** * 워커 메시지 처리 * @param workerId 워커 ID * @param message 메시지 */ private handleWorkerMessage; /** * 워커 오류 처리 * @param workerId 워커 ID * @param error 오류 */ private handleWorkerError; /** * 태스크 완료 처리 * @param taskId 태스크 ID * @param result 결과 */ private handleTaskCompletion; /** * 태스크 실패 처리 * @param taskId 태스크 ID * @param error 오류 */ private handleTaskFailure; /** * 태스크 취소 처리 * @param taskId 태스크 ID */ private handleTaskCancellation; /** * 태스크 정리 * @param taskId 태스크 ID */ private cleanupTask; /** * 대기 중인 태스크 찾기 * @param taskId 태스크 ID */ private findPendingTask; /** * 태스크 큐 가져오기 또는 생성 * @param workerType 워커 유형 */ private getOrCreateQueue; /** * 통계 업데이트 */ private updateStats; /** * 평균 태스크 소요 시간 계산 */ private calculateAvgTaskDuration; /** * 태스크 제출 * @param data 태스크 데이터 * @param options 태스크 옵션 */ submitTask(data: T, options?: Partial>): Promise; /** * 태스크 취소 * @param taskId 취소할 태스크 ID */ cancelTask(taskId: string): Promise; /** * 태스크 상태 확인 * @param taskId 태스크 ID */ getTaskStatus(taskId: string): Promise; /** * 대기 중인 태스크 가져오기 * @param workerType 워커 유형 */ getPendingTasks(workerType?: string): Task[]; /** * 실행 중인 태스크 가져오기 * @param workerType 워커 유형 */ getRunningTasks(workerType?: string): Task[]; /** * 워커 풀 상태 통계 */ getStats(): WorkerPoolStats; /** * 이벤트 스트림 생성 * @param options 스트림 옵션 */ createEventStream(options?: StreamOptions): EventStream; /** * 워커 풀 종료 * @param force 강제 종료 여부 */ shutdown(force?: boolean): Promise; /** * 모든 타이머를 정리하는 내부 메서드 */ private _clearAllTimeouts; /** * 로그 출력 */ private log; private assignTaskToWorker; }