poolifier 4.0.11 → 4.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -6,30 +6,142 @@ import { EventLoopUtilization } from 'node:perf_hooks';
6
6
  import { ClusterSettings, Worker } from 'node:cluster';
7
7
 
8
8
  /**
9
- * Circular buffer
9
+ * Circular buffer designed for positive numbers.
10
+ *
11
+ * @internal
10
12
  */
11
- declare class CircularBuffer<T> {
12
- private readonly readIdx;
13
+ declare class CircularBuffer {
14
+ private readIdx;
13
15
  private writeIdx;
14
- private items;
16
+ private readonly items;
15
17
  private readonly maxArrayIdx;
18
+ size: number;
16
19
  /**
17
- * @param size - Buffer size
18
- * @returns CircularBuffer
20
+ * @param size - Buffer size. @defaultValue defaultBufferSize
21
+ * @returns CircularBuffer.
19
22
  */
20
23
  constructor(size?: number);
21
24
  /**
22
- * Puts data into buffer
25
+ * Checks whether the buffer is empty.
26
+ *
27
+ * @returns Whether the buffer is empty.
28
+ */
29
+ empty(): boolean;
30
+ /**
31
+ * Checks whether the buffer is full.
32
+ *
33
+ * @returns Whether the buffer is full.
34
+ */
35
+ full(): boolean;
36
+ /**
37
+ * Puts number into buffer.
38
+ *
39
+ * @param number - Number to put into buffer.
40
+ */
41
+ put(number: number): void;
42
+ /**
43
+ * Gets number from buffer.
44
+ *
45
+ * @returns Number from buffer.
46
+ */
47
+ get(): number | undefined;
48
+ /**
49
+ * Returns buffer as numbers' array.
50
+ *
51
+ * @returns Numbers' array.
52
+ */
53
+ toArray(): number[];
54
+ /**
55
+ * Checks the buffer size.
56
+ *
57
+ * @param size - Buffer size.
58
+ */
59
+ private checkSize;
60
+ }
61
+
62
+ /**
63
+ * Fixed priority queue node.
64
+ *
65
+ * @typeParam T - Type of priority queue node data.
66
+ * @internal
67
+ */
68
+ interface FixedPriorityQueueNode<T> {
69
+ data: T;
70
+ priority: number;
71
+ }
72
+ /**
73
+ * Fixed priority queue.
74
+ *
75
+ * @typeParam T - Type of fixed priority queue data.
76
+ * @internal
77
+ */
78
+ declare class FixedPriorityQueue<T> {
79
+ private start;
80
+ private readonly nodeArray;
81
+ /** The fixed priority queue capacity. */
82
+ readonly capacity: number;
83
+ /** The fixed priority queue size. */
84
+ size: number;
85
+ /** Whether to enable priority. */
86
+ enablePriority: boolean;
87
+ /**
88
+ * Constructs a fixed priority queue.
89
+ *
90
+ * @param size - Fixed priority queue size. @defaultValue defaultQueueSize
91
+ * @param enablePriority - Whether to enable priority. @defaultValue false
92
+ * @returns FixedPriorityQueue.
93
+ */
94
+ constructor(size?: number, enablePriority?: boolean);
95
+ /**
96
+ * Checks if the fixed priority queue is empty.
97
+ *
98
+ * @returns `true` if the fixed priority queue is empty, `false` otherwise.
99
+ */
100
+ empty(): boolean;
101
+ /**
102
+ * Checks if the fixed priority queue is full.
103
+ *
104
+ * @returns `true` if the fixed priority queue is full, `false` otherwise.
105
+ */
106
+ full(): boolean;
107
+ /**
108
+ * Enqueue data into the fixed priority queue.
109
+ *
110
+ * @param data - Data to enqueue.
111
+ * @param priority - Priority of the data. Lower values have higher priority.
112
+ * @returns The new size of the priority queue.
113
+ * @throws If the fixed priority queue is full.
114
+ */
115
+ enqueue(data: T, priority?: number): number;
116
+ /**
117
+ * Gets data from the fixed priority queue.
118
+ *
119
+ * @param index - The index of the data to get.
120
+ * @returns The data at the index or `undefined` if the fixed priority queue is empty or the index is out of bounds.
121
+ */
122
+ get(index: number): T | undefined;
123
+ /**
124
+ * Dequeue data from the fixed priority queue.
125
+ *
126
+ * @returns The dequeued data or `undefined` if the priority queue is empty.
127
+ */
128
+ dequeue(): T | undefined;
129
+ /**
130
+ * Clears the fixed priority queue.
131
+ */
132
+ clear(): void;
133
+ /**
134
+ * Returns an iterator for the fixed priority queue.
23
135
  *
24
- * @param data - Data to push
136
+ * @returns An iterator for the fixed priority queue.
137
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
25
138
  */
26
- put(data: T): void;
139
+ [Symbol.iterator](): Iterator<T>;
27
140
  /**
28
- * Returns buffer as array
141
+ * Checks the queue size.
29
142
  *
30
- * @returns T[]
143
+ * @param size - Queue size.
31
144
  */
32
- toArray(): T[];
33
145
  private checkSize;
34
146
  }
35
147
 
@@ -587,7 +699,7 @@ interface MeasurementStatistics {
587
699
  /**
588
700
  * Measurement history.
589
701
  */
590
- readonly history: CircularBuffer<number>;
702
+ readonly history: CircularBuffer;
591
703
  }
592
704
  /**
593
705
  * Event loop utilization measurement statistics.
@@ -769,6 +881,7 @@ interface WorkerNodeOptions {
769
881
  env?: Record<string, unknown>;
770
882
  tasksQueueBackPressureSize: number | undefined;
771
883
  tasksQueueBucketSize: number | undefined;
884
+ tasksQueuePriority: boolean | undefined;
772
885
  }
773
886
  /**
774
887
  * Worker node interface.
@@ -804,6 +917,12 @@ interface IWorkerNode<Worker extends IWorker, Data = unknown> extends EventEmitt
804
917
  * This is the number of tasks that can be enqueued before the worker node has back pressure.
805
918
  */
806
919
  tasksQueueBackPressureSize: number;
920
+ /**
921
+ * Sets tasks queue priority.
922
+ *
923
+ * @param enablePriority - Whether to enable tasks queue priority.
924
+ */
925
+ readonly setTasksQueuePriority: (enablePriority: boolean) => void;
807
926
  /**
808
927
  * Tasks queue size.
809
928
  *
@@ -1573,7 +1692,7 @@ declare abstract class AbstractPool<Worker extends IWorker, Data = unknown, Resp
1573
1692
  * Chooses a worker node for the next task.
1574
1693
  *
1575
1694
  * @param name - The task function name.
1576
- * @returns The chosen worker node key
1695
+ * @returns The chosen worker node key.
1577
1696
  */
1578
1697
  private chooseWorkerNode;
1579
1698
  /**
@@ -1657,6 +1776,7 @@ declare abstract class AbstractPool<Worker extends IWorker, Data = unknown, Resp
1657
1776
  private readonly handleWorkerNodeIdleEvent;
1658
1777
  private readonly workerNodeStealTask;
1659
1778
  private readonly handleWorkerNodeBackPressureEvent;
1779
+ private setTasksQueuePriority;
1660
1780
  /**
1661
1781
  * This method is the message listener registered on each worker.
1662
1782
  */
@@ -1677,6 +1797,7 @@ declare abstract class AbstractPool<Worker extends IWorker, Data = unknown, Resp
1677
1797
  * @returns The worker information.
1678
1798
  */
1679
1799
  protected getWorkerInfo(workerNodeKey: number): WorkerInfo | undefined;
1800
+ private getTasksQueuePriority;
1680
1801
  /**
1681
1802
  * Creates a worker node.
1682
1803
  *
@@ -1874,9 +1995,8 @@ declare class DynamicThreadPool<Data = unknown, Response = unknown> extends Fixe
1874
1995
  * @typeParam T - Type of priority queue node data.
1875
1996
  * @internal
1876
1997
  */
1877
- interface PriorityQueueNode<T> {
1878
- data: T;
1879
- priority: number;
1998
+ interface PriorityQueueNode<T> extends FixedPriorityQueue<T> {
1999
+ next?: FixedPriorityQueue<T>;
1880
2000
  }
1881
2001
  /**
1882
2002
  * Priority queue.
@@ -1885,23 +2005,29 @@ interface PriorityQueueNode<T> {
1885
2005
  * @internal
1886
2006
  */
1887
2007
  declare class PriorityQueue<T> {
1888
- private nodeArray;
1889
- /** Prioritized bucket size. */
2008
+ private head;
2009
+ private tail;
1890
2010
  private readonly bucketSize;
1891
- /** The size of the priority queue. */
1892
- size: number;
1893
- /** The maximum size of the priority queue. */
2011
+ /** The priority queue maximum size. */
1894
2012
  maxSize: number;
1895
- /**
1896
- * The number of filled prioritized buckets.
1897
- */
1898
- get buckets(): number;
1899
2013
  /**
1900
2014
  * Constructs a priority queue.
1901
2015
  *
1902
- * @param bucketSize - Prioritized bucket size. @defaultValue Number.POSITIVE_INFINITY
2016
+ * @param bucketSize - Prioritized bucket size. @defaultValue defaultBucketSize
2017
+ * @param enablePriority - Whether to enable priority. @defaultValue false
2018
+ * @returns PriorityQueue.
2019
+ */
2020
+ constructor(bucketSize?: number, enablePriority?: boolean);
2021
+ /**
2022
+ * The priority queue size.
1903
2023
  */
1904
- constructor(bucketSize?: number);
2024
+ get size(): number;
2025
+ get enablePriority(): boolean;
2026
+ set enablePriority(enablePriority: boolean);
2027
+ /**
2028
+ * The number of filled prioritized buckets.
2029
+ */
2030
+ get buckets(): number;
1905
2031
  /**
1906
2032
  * Enqueue data into the priority queue.
1907
2033
  *
@@ -1913,20 +2039,10 @@ declare class PriorityQueue<T> {
1913
2039
  /**
1914
2040
  * Dequeue data from the priority queue.
1915
2041
  *
1916
- * @param bucket - The prioritized bucket to dequeue from. @defaultValue 0
2042
+ * @param bucket - The prioritized bucket to dequeue from.
1917
2043
  * @returns The dequeued data or `undefined` if the priority queue is empty.
1918
2044
  */
1919
2045
  dequeue(bucket?: number): T | undefined;
1920
- /**
1921
- * Peeks at the first data.
1922
- * @returns The first data or `undefined` if the priority queue is empty.
1923
- */
1924
- peekFirst(): T | undefined;
1925
- /**
1926
- * Peeks at the last data.
1927
- * @returns The last data or `undefined` if the priority queue is empty.
1928
- */
1929
- peekLast(): T | undefined;
1930
2046
  /**
1931
2047
  * Clears the priority queue.
1932
2048
  */
@@ -1938,18 +2054,6 @@ declare class PriorityQueue<T> {
1938
2054
  * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
1939
2055
  */
1940
2056
  [Symbol.iterator](): Iterator<T>;
1941
- /**
1942
- * Increments the size of the priority queue.
1943
- *
1944
- * @returns The new size of the priority queue.
1945
- */
1946
- private incrementSize;
1947
- /**
1948
- * Decrements the size of the priority queue.
1949
- *
1950
- * @returns The new size of the priority queue.
1951
- */
1952
- private decrementSize;
1953
2057
  }
1954
2058
 
1955
2059
  /**
@@ -2201,4 +2305,4 @@ declare class ThreadWorker<Data = unknown, Response = unknown> extends AbstractW
2201
2305
  protected handleError(error: Error | string): string;
2202
2306
  }
2203
2307
 
2204
- export { AbstractPool, AbstractWorker, CircularBuffer, type ClusterPoolOptions, ClusterWorker, DynamicClusterPool, DynamicThreadPool, type ErrorHandler, type EventHandler, type EventLoopUtilizationMeasurementStatistics, type ExitHandler, FixedClusterPool, FixedThreadPool, type IPool, type IWorker, type IWorkerChoiceStrategy, type IWorkerNode, type KillBehavior, KillBehaviors, type KillHandler, type Measurement, type MeasurementOptions, type MeasurementStatistics, type MeasurementStatisticsRequirements, Measurements, type MessageHandler, type MessageValue, type OnlineHandler, type PoolEvent, PoolEvents, type PoolInfo, type PoolOptions, type PoolType, PoolTypes, PriorityQueue, type PriorityQueueNode, type PromiseResponseWrapper, type StrategyData, type StrategyPolicy, type Task, type TaskAsyncFunction, type TaskFunction, type TaskFunctionObject, type TaskFunctionOperationResult, type TaskFunctionProperties, type TaskFunctions, type TaskPerformance, type TaskStatistics, type TaskStatisticsRequirements, type TaskSyncFunction, type TasksQueueOptions, type ThreadPoolOptions, ThreadWorker, WorkerChoiceStrategies, WorkerChoiceStrategiesContext, type WorkerChoiceStrategy, type WorkerChoiceStrategyOptions, type WorkerError, type WorkerInfo, type WorkerNodeEventDetail, type WorkerNodeOptions, type WorkerOptions, type WorkerStatistics, type WorkerType, WorkerTypes, type WorkerUsage, type Writable, availableParallelism };
2308
+ export { AbstractPool, AbstractWorker, CircularBuffer, type ClusterPoolOptions, ClusterWorker, DynamicClusterPool, DynamicThreadPool, type ErrorHandler, type EventHandler, type EventLoopUtilizationMeasurementStatistics, type ExitHandler, FixedClusterPool, FixedPriorityQueue, type FixedPriorityQueueNode, FixedThreadPool, type IPool, type IWorker, type IWorkerChoiceStrategy, type IWorkerNode, type KillBehavior, KillBehaviors, type KillHandler, type Measurement, type MeasurementOptions, type MeasurementStatistics, type MeasurementStatisticsRequirements, Measurements, type MessageHandler, type MessageValue, type OnlineHandler, type PoolEvent, PoolEvents, type PoolInfo, type PoolOptions, type PoolType, PoolTypes, PriorityQueue, type PriorityQueueNode, type PromiseResponseWrapper, type StrategyData, type StrategyPolicy, type Task, type TaskAsyncFunction, type TaskFunction, type TaskFunctionObject, type TaskFunctionOperationResult, type TaskFunctionProperties, type TaskFunctions, type TaskPerformance, type TaskStatistics, type TaskStatisticsRequirements, type TaskSyncFunction, type TasksQueueOptions, type ThreadPoolOptions, ThreadWorker, WorkerChoiceStrategies, WorkerChoiceStrategiesContext, type WorkerChoiceStrategy, type WorkerChoiceStrategyOptions, type WorkerError, type WorkerInfo, type WorkerNodeEventDetail, type WorkerNodeOptions, type WorkerOptions, type WorkerStatistics, type WorkerType, WorkerTypes, type WorkerUsage, type Writable, availableParallelism };