You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.4 KiB
41 lines
1.4 KiB
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
import type { QueueChildMessage, TaskQueue } from './types'; |
|
export declare type ComputeTaskPriorityCallback = (method: string, ...args: Array<unknown>) => number; |
|
declare type QueueItem = { |
|
task: QueueChildMessage; |
|
priority: number; |
|
}; |
|
/** |
|
* Priority queue that processes tasks in natural ordering (lower priority first) |
|
* accoridng to the priority computed by the function passed in the constructor. |
|
* |
|
* FIFO ordering isn't guaranteed for tasks with the same priority. |
|
* |
|
* Worker specific tasks with the same priority as a non-worker specific task |
|
* are always processed first. |
|
*/ |
|
export default class PriorityQueue implements TaskQueue { |
|
private _computePriority; |
|
private _queue; |
|
private _sharedQueue; |
|
constructor(_computePriority: ComputeTaskPriorityCallback); |
|
enqueue(task: QueueChildMessage, workerId?: number): void; |
|
_enqueue(task: QueueChildMessage, queue: MinHeap<QueueItem>): void; |
|
dequeue(workerId: number): QueueChildMessage | null; |
|
_getWorkerQueue(workerId: number): MinHeap<QueueItem>; |
|
} |
|
declare type HeapItem = { |
|
priority: number; |
|
}; |
|
declare class MinHeap<TItem extends HeapItem> { |
|
private _heap; |
|
peek(): TItem | null; |
|
add(item: TItem): void; |
|
poll(): TItem | null; |
|
} |
|
export {};
|
|
|