@nxtedition/scheduler 4.1.4 → 4.1.6
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/README.md +10 -3
- package/lib/scheduler.d.ts +4 -0
- package/lib/scheduler.d.ts.map +1 -1
- package/lib/scheduler.js +155 -38
- package/lib/scheduler.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -58,7 +58,7 @@ const scheduler = new Scheduler({
|
|
|
58
58
|
})
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
Unspecified priorities
|
|
61
|
+
Unspecified priorities inherit the cap from the priority just below them — caps propagate downward, not upward. Priorities above the topmost explicit fall back to `max`, and an unspecified `lowest` seeds from the bottommost explicit. The example above resolves to `lowest=lower=5, low=20, normal..highest=100`. Each per-priority value is itself capped at `max`.
|
|
62
62
|
|
|
63
63
|
#### Starvation prevention
|
|
64
64
|
|
|
@@ -111,6 +111,10 @@ const scheduler = new Scheduler(workerData)
|
|
|
111
111
|
await scheduler.run(() => work())
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
+
The global `max` is a hard cap across all workers — a worker that finds the global counter at the limit queues its task locally and waits (via `Atomics.waitAsync` on the shared counter). When another worker releases a slot, `Atomics.notify` wakes the waiter, which retries dispatch.
|
|
115
|
+
|
|
116
|
+
`Atomics.waitAsync` does not keep the Node event loop alive. If a worker is fully idle (`running === 0`) with tasks queued waiting for capacity, you need something else holding the loop open — usually trivial in real applications (HTTP servers, intervals, etc.), but standalone scripts may need a `setInterval(() => {}, …)` until their work is done.
|
|
117
|
+
|
|
114
118
|
### UV Thread Pool Scheduling
|
|
115
119
|
|
|
116
120
|
A practical use case is coordinating access to the libuv thread pool (`UV_THREADPOOL_SIZE`) across multiple worker threads. For example, several HTTP file-serving workers can share a scheduler so that file-system operations (which consume UV thread pool slots) are prioritized and throttled globally:
|
|
@@ -150,12 +154,11 @@ This ensures that high-priority requests get file-system access first, while low
|
|
|
150
154
|
### Monitoring
|
|
151
155
|
|
|
152
156
|
```js
|
|
153
|
-
const { running, pending,
|
|
157
|
+
const { running, pending, queues } = scheduler.stats
|
|
154
158
|
```
|
|
155
159
|
|
|
156
160
|
- `running` — currently executing tasks
|
|
157
161
|
- `pending` — tasks waiting in queues
|
|
158
|
-
- `deferred` — total tasks that were queued (lifetime counter)
|
|
159
162
|
- `queues` — per-priority queue counts
|
|
160
163
|
|
|
161
164
|
## API
|
|
@@ -197,6 +200,10 @@ Signal task completion. Dequeues the next pending task if concurrency allows.
|
|
|
197
200
|
|
|
198
201
|
Create shared state for cross-worker scheduling.
|
|
199
202
|
|
|
203
|
+
### `scheduler[Symbol.dispose]()`
|
|
204
|
+
|
|
205
|
+
Drops the reference to any pending shared-mode wait. Use when abandoning a Scheduler with tasks still queued so the orphan promise can be GC'd.
|
|
206
|
+
|
|
200
207
|
### `parsePriority(value): number`
|
|
201
208
|
|
|
202
209
|
Parse a string or number into a normalized priority value.
|
package/lib/scheduler.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export type ConcurrencyOptions = number | {
|
|
|
9
9
|
lower?: number;
|
|
10
10
|
lowest?: number;
|
|
11
11
|
};
|
|
12
|
+
declare const kOnExit: unique symbol;
|
|
12
13
|
export declare class Scheduler extends Queue {
|
|
13
14
|
#private;
|
|
14
15
|
private stateView;
|
|
@@ -30,6 +31,8 @@ export declare class Scheduler extends Queue {
|
|
|
30
31
|
}, options?: {
|
|
31
32
|
concurrency?: ConcurrencyOptions;
|
|
32
33
|
});
|
|
34
|
+
[Symbol.dispose](): void;
|
|
35
|
+
[kOnExit](): void;
|
|
33
36
|
run<T>(fn: () => PromiseLike<T> | T, priority?: Priority): Promise<T>;
|
|
34
37
|
run<T, U>(fn: (opaque: U) => PromiseLike<T> | T, priority: Priority, opaque: U): Promise<T>;
|
|
35
38
|
acquire(fn: () => unknown, priority?: Priority): boolean;
|
|
@@ -37,4 +40,5 @@ export declare class Scheduler extends Queue {
|
|
|
37
40
|
tryAcquire(priority?: Priority): boolean;
|
|
38
41
|
release: () => void;
|
|
39
42
|
}
|
|
43
|
+
export {};
|
|
40
44
|
//# sourceMappingURL=scheduler.d.ts.map
|
package/lib/scheduler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,EAAuB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAchG,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,EAAuB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAchG,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAkGL,QAAA,MAAM,OAAO,eAA4B,CAAA;AAQzC,qBAAa,SAAU,SAAQ,KAAK;;IAClC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IASjC,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,SAAS,CAAQ;IAqBzB,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM;IAc1C,IAAI,WAAW,WAGd;IAED,IAAI,KAAK;;;;;;MAMR;gBAGC,iBAAiB,EAAE,iBAAiB,GAAG;QAAE,WAAW,CAAC,EAAE,kBAAkB,CAAA;KAAE,EAC3E,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,kBAAkB,CAAA;KAAE;IAoDhD,CAAC,MAAM,CAAC,OAAO,CAAC;IAKhB,CAAC,OAAO,CAAC;IAUT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAmB3F,OAAO,CAAC,EAAE,EAAE,MAAM,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO;IACxD,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO;IAoD1F,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO;IA+FxC,OAAO,aAgBN;CACF"}
|
package/lib/scheduler.js
CHANGED
|
@@ -5,6 +5,15 @@ const MAGIC_INDEX = 8; // within first cache line, between RUNNING and CONCURREN
|
|
|
5
5
|
const SCHEDULER_MAGIC = 0x5ca4edde; // sanity-check sentinel written by makeSharedState
|
|
6
6
|
// Per-priority limit keys, ordered to match `Queue.queues` (lowest=0, normal=3, highest=6).
|
|
7
7
|
const PRIORITY_KEYS = ['lowest', 'lower', 'low', 'normal', 'high', 'higher', 'highest'];
|
|
8
|
+
// Reject anything that isn't a literal config object — Map/Date/Array/class instances all
|
|
9
|
+
// have undefined for `cfg.max` and would silently degrade to default Infinity otherwise.
|
|
10
|
+
function isPlainObject(v) {
|
|
11
|
+
if (v === null || typeof v !== 'object') {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const p = Object.getPrototypeOf(v);
|
|
15
|
+
return p === null || p === Object.prototype;
|
|
16
|
+
}
|
|
8
17
|
function validateLimit(name, value) {
|
|
9
18
|
if (value === Infinity) {
|
|
10
19
|
return Number.MAX_SAFE_INTEGER;
|
|
@@ -17,30 +26,91 @@ function validateLimit(name, value) {
|
|
|
17
26
|
// Build a 7-element limits array indexed by `priority + 3`. Each entry is capped by `max`
|
|
18
27
|
// so a single comparison `running < limits[idx]` enforces both per-priority and overall caps.
|
|
19
28
|
function buildLimits(opts, sharedMax = Number.MAX_SAFE_INTEGER) {
|
|
20
|
-
|
|
29
|
+
let cfg;
|
|
30
|
+
if (opts == null) {
|
|
31
|
+
cfg = {};
|
|
32
|
+
}
|
|
33
|
+
else if (typeof opts === 'number') {
|
|
34
|
+
cfg = { max: opts };
|
|
35
|
+
}
|
|
36
|
+
else if (isPlainObject(opts)) {
|
|
37
|
+
cfg = opts;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
throw new Error('Invalid concurrency');
|
|
41
|
+
}
|
|
21
42
|
const max = Math.min(cfg.max == null ? Number.MAX_SAFE_INTEGER : validateLimit('max', cfg.max), sharedMax);
|
|
22
|
-
|
|
43
|
+
// Validate explicit per-priority values; null = not specified.
|
|
44
|
+
const explicit = PRIORITY_KEYS.map((key) => {
|
|
23
45
|
const v = cfg[key];
|
|
24
46
|
if (v == null) {
|
|
25
|
-
return
|
|
47
|
+
return null;
|
|
26
48
|
}
|
|
27
49
|
return Math.min(validateLimit(key, v), max);
|
|
28
50
|
});
|
|
51
|
+
let firstExplicit = null;
|
|
52
|
+
let lastExplicitIdx = -1;
|
|
53
|
+
for (let i = 0; i < explicit.length; i++) {
|
|
54
|
+
if (explicit[i] !== null) {
|
|
55
|
+
if (firstExplicit === null) {
|
|
56
|
+
firstExplicit = explicit[i];
|
|
57
|
+
}
|
|
58
|
+
lastExplicitIdx = i;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Fill defaults so each unspecified priority inherits the cap from the priority
|
|
62
|
+
// just below it (i.e. the most recently resolved limit walking lowest→highest):
|
|
63
|
+
// - { lowest:1, normal:2, highest:4 } → 1,1,1,2,2,2,4
|
|
64
|
+
// - { lower:1, normal:2, higher:3 } → 1,1,1,2,2,3,max
|
|
65
|
+
// Two boundary cases:
|
|
66
|
+
// - Priorities ABOVE the topmost explicit default to `max` (no cap propagates
|
|
67
|
+
// down from a non-existent higher priority).
|
|
68
|
+
// - Lowest-tier unspecified (below the bottommost explicit) seeds from the
|
|
69
|
+
// bottommost explicit so the cap propagates downward, not upward.
|
|
70
|
+
const limits = new Array(PRIORITY_KEYS.length);
|
|
71
|
+
let prev = firstExplicit ?? max;
|
|
72
|
+
for (let i = 0; i < PRIORITY_KEYS.length; i++) {
|
|
73
|
+
const v = explicit[i];
|
|
74
|
+
if (v !== null) {
|
|
75
|
+
prev = v;
|
|
76
|
+
limits[i] = v;
|
|
77
|
+
}
|
|
78
|
+
else if (i > lastExplicitIdx) {
|
|
79
|
+
limits[i] = max;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
limits[i] = prev;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
29
85
|
return { max, limits };
|
|
30
86
|
}
|
|
87
|
+
// Tracks live Scheduler instances so a graceful process exit can release any
|
|
88
|
+
// slots they still hold in shared mode. process.on('exit') is best-effort —
|
|
89
|
+
// SIGKILL / SIGSEGV / OOM bypass it, so this is only a safety net for clean
|
|
90
|
+
// shutdowns and uncaught exceptions, not hard crashes. We use a strong ref
|
|
91
|
+
// so the scheduler isn't GC'd before exit fires; Symbol.dispose removes it
|
|
92
|
+
// when the user is finished with the instance.
|
|
93
|
+
const schedulers = new Set();
|
|
94
|
+
const kOnExit = Symbol('schedulerOnExit');
|
|
95
|
+
process.on('exit', () => {
|
|
96
|
+
for (const scheduler of schedulers) {
|
|
97
|
+
scheduler[kOnExit]();
|
|
98
|
+
}
|
|
99
|
+
});
|
|
31
100
|
export class Scheduler extends Queue {
|
|
32
101
|
stateView;
|
|
33
102
|
shared;
|
|
34
103
|
// Indexed by `priority + 3` (lowest=0, normal=3, highest=6); each entry already
|
|
35
104
|
// includes the overall `max` ceiling so #tryAcquire only needs one comparison.
|
|
36
|
-
#
|
|
37
|
-
// Overall ceiling, enforced
|
|
38
|
-
//
|
|
39
|
-
//
|
|
105
|
+
#limits;
|
|
106
|
+
// Overall ceiling, enforced separately in #schedule because getNextQueue's lottery
|
|
107
|
+
// bypasses per-priority limits to prevent starvation — without this hard cap, the
|
|
108
|
+
// bypass could push running above max during drain.
|
|
40
109
|
#max;
|
|
41
110
|
running = 0;
|
|
42
111
|
pending = 0;
|
|
43
112
|
releasing = false;
|
|
113
|
+
#waitPromise = null;
|
|
44
114
|
// Pre-bound method used as the acquire callback in run()'s slow path.
|
|
45
115
|
// Defined as an arrow function so it captures `this` without a per-call closure.
|
|
46
116
|
#runTask = ({ resolve, reject, fn, opaque }) => {
|
|
@@ -85,6 +155,9 @@ export class Scheduler extends Queue {
|
|
|
85
155
|
}
|
|
86
156
|
constructor(optsOrArrayBuffer, options) {
|
|
87
157
|
super();
|
|
158
|
+
if (options != null && !isPlainObject(options)) {
|
|
159
|
+
throw new Error('Invalid options');
|
|
160
|
+
}
|
|
88
161
|
if (optsOrArrayBuffer instanceof SharedArrayBuffer) {
|
|
89
162
|
const state = optsOrArrayBuffer;
|
|
90
163
|
if (state.byteLength !== 128) {
|
|
@@ -98,19 +171,45 @@ export class Scheduler extends Queue {
|
|
|
98
171
|
const sm = Atomics.load(this.stateView, CONCURRENCY_INDEX);
|
|
99
172
|
const sharedMax = sm < 0 ? Number.MAX_SAFE_INTEGER : sm;
|
|
100
173
|
const built = buildLimits(options?.concurrency, sharedMax);
|
|
101
|
-
this.#
|
|
174
|
+
this.#limits = built.limits;
|
|
102
175
|
this.#max = built.max;
|
|
103
176
|
}
|
|
104
177
|
else {
|
|
178
|
+
if (optsOrArrayBuffer != null && !isPlainObject(optsOrArrayBuffer)) {
|
|
179
|
+
throw new Error('Invalid options');
|
|
180
|
+
}
|
|
181
|
+
// Second arg is only consulted in shared-buffer mode; reject silently-ignored use.
|
|
182
|
+
if (options != null) {
|
|
183
|
+
throw new Error('options argument requires a SharedArrayBuffer as the first argument');
|
|
184
|
+
}
|
|
105
185
|
const opts = optsOrArrayBuffer;
|
|
106
186
|
const { limits, max } = buildLimits(opts?.concurrency);
|
|
107
187
|
this.stateView = new Int32Array(64);
|
|
108
188
|
// Persist `max` so the public `concurrency` getter still reflects the overall ceiling.
|
|
109
189
|
Atomics.store(this.stateView, CONCURRENCY_INDEX, max === Number.MAX_SAFE_INTEGER ? -1 : max);
|
|
110
190
|
this.shared = false;
|
|
111
|
-
this.#
|
|
191
|
+
this.#limits = limits;
|
|
112
192
|
this.#max = max;
|
|
113
193
|
}
|
|
194
|
+
// Only shared schedulers participate in exit cleanup — non-shared mode has
|
|
195
|
+
// no cross-thread state to clean up, and registering them would pin them
|
|
196
|
+
// alive until process exit (memory leak for short-lived schedulers).
|
|
197
|
+
if (this.shared) {
|
|
198
|
+
schedulers.add(this);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
[Symbol.dispose]() {
|
|
202
|
+
this.#waitPromise = null;
|
|
203
|
+
schedulers.delete(this);
|
|
204
|
+
}
|
|
205
|
+
[kOnExit]() {
|
|
206
|
+
// Release the slots this worker is still holding so surviving workers'
|
|
207
|
+
// running counter stays accurate, then wake any waiters so their waitAsync
|
|
208
|
+
// can re-evaluate against the new value.
|
|
209
|
+
if (this.running > 0) {
|
|
210
|
+
Atomics.sub(this.stateView, RUNNING_INDEX, this.running);
|
|
211
|
+
Atomics.notify(this.stateView, RUNNING_INDEX);
|
|
212
|
+
}
|
|
114
213
|
}
|
|
115
214
|
run(fn, priority = Queue.NORMAL, opaque) {
|
|
116
215
|
return new Promise((resolve, reject) => {
|
|
@@ -143,23 +242,35 @@ export class Scheduler extends Queue {
|
|
|
143
242
|
queue.arr.push(fn, opaque);
|
|
144
243
|
queue.cnt += 1;
|
|
145
244
|
this.pending += 1;
|
|
245
|
+
if (this.shared) {
|
|
246
|
+
this.#maybeWait(this.stateView[RUNNING_INDEX]);
|
|
247
|
+
}
|
|
146
248
|
return false;
|
|
147
249
|
}
|
|
250
|
+
#maybeWait(expected) {
|
|
251
|
+
if (!this.shared || this.running > 0 || this.pending === 0 || this.#waitPromise) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
// No point waiting when global cap is 0 — value can never drop to enable dispatch.
|
|
255
|
+
if (this.#max === 0) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// Atomics.waitAsync does not keep the Node event loop alive on its own. Callers
|
|
259
|
+
// with idle workers (running===0 and tasks queued) need an external keep-alive
|
|
260
|
+
// (their own setTimeout, setInterval, HTTP server, etc.) until notify wakes us.
|
|
261
|
+
const { value, async } = Atomics.waitAsync(this.stateView, RUNNING_INDEX, expected);
|
|
262
|
+
this.#waitPromise = (async ? value : Promise.resolve(value)).then(() => {
|
|
263
|
+
this.#waitPromise = null;
|
|
264
|
+
this.#schedule(this.stateView[RUNNING_INDEX]);
|
|
265
|
+
});
|
|
266
|
+
}
|
|
148
267
|
tryAcquire(priority) {
|
|
149
268
|
const p = priority == null ? Queue.NORMAL : parsePriority(priority);
|
|
150
269
|
return this.#tryAcquire(p);
|
|
151
270
|
}
|
|
152
271
|
#tryAcquire(priority) {
|
|
153
|
-
const limit = this.#
|
|
272
|
+
const limit = this.#limits[priority + 3];
|
|
154
273
|
if (this.shared) {
|
|
155
|
-
// In shared-buffer mode, other workers may hold global slots so we guarantee at least one
|
|
156
|
-
// local job runs regardless (starvation prevention). Not applicable to non-shared mode where
|
|
157
|
-
// concurrency=0 should queue everything.
|
|
158
|
-
if (this.running < 1) {
|
|
159
|
-
Atomics.add(this.stateView, RUNNING_INDEX, 1);
|
|
160
|
-
this.running += 1;
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
274
|
// We use non-atomic access here as an optimization and treat the concurrency limit as a soft limit.
|
|
164
275
|
if (this.stateView[RUNNING_INDEX] < limit) {
|
|
165
276
|
Atomics.add(this.stateView, RUNNING_INDEX, 1);
|
|
@@ -175,37 +286,25 @@ export class Scheduler extends Queue {
|
|
|
175
286
|
}
|
|
176
287
|
return false;
|
|
177
288
|
}
|
|
178
|
-
|
|
289
|
+
#schedule(running) {
|
|
179
290
|
const shared = this.shared;
|
|
180
|
-
let running;
|
|
181
|
-
if (this.running > 0) {
|
|
182
|
-
this.running -= 1;
|
|
183
|
-
running = shared ? Atomics.sub(this.stateView, RUNNING_INDEX, 1) - 1 : this.running;
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
// Gracefully handle user error...
|
|
187
|
-
running = shared ? Atomics.load(this.stateView, RUNNING_INDEX) : this.running;
|
|
188
|
-
}
|
|
189
291
|
if (this.pending === 0 || this.releasing) {
|
|
190
292
|
return;
|
|
191
293
|
}
|
|
192
|
-
const limits = this.#
|
|
294
|
+
const limits = this.#limits;
|
|
193
295
|
const max = this.#max;
|
|
194
296
|
try {
|
|
195
297
|
this.releasing = true;
|
|
196
298
|
while (this.pending > 0) {
|
|
197
|
-
// Hard cap
|
|
198
|
-
//
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
if (this.running > 0 && running >= max) {
|
|
299
|
+
// Hard cap on global concurrency. getNextQueue's lottery bypasses per-priority
|
|
300
|
+
// limits to prevent starvation and would otherwise push running above max.
|
|
301
|
+
if (running >= max) {
|
|
302
|
+
this.#maybeWait(running);
|
|
202
303
|
break;
|
|
203
304
|
}
|
|
204
|
-
|
|
205
|
-
// regardless of per-priority limits. Pass running=-1 as the bypass sentinel
|
|
206
|
-
// so getNextQueue's scan accepts any non-empty queue.
|
|
207
|
-
const queue = this.getNextQueue(limits, this.running === 0 ? -1 : running);
|
|
305
|
+
const queue = this.getNextQueue(limits, running);
|
|
208
306
|
if (queue == null) {
|
|
307
|
+
this.#maybeWait(running);
|
|
209
308
|
break;
|
|
210
309
|
}
|
|
211
310
|
const fn = queue.arr[queue.idx];
|
|
@@ -245,6 +344,24 @@ export class Scheduler extends Queue {
|
|
|
245
344
|
finally {
|
|
246
345
|
this.releasing = false;
|
|
247
346
|
}
|
|
347
|
+
}
|
|
348
|
+
release = () => {
|
|
349
|
+
let running;
|
|
350
|
+
if (this.running > 0) {
|
|
351
|
+
this.running -= 1;
|
|
352
|
+
if (this.shared) {
|
|
353
|
+
running = Atomics.sub(this.stateView, RUNNING_INDEX, 1) - 1;
|
|
354
|
+
// TODO (perf): Might be enough to notify a single worker...
|
|
355
|
+
Atomics.notify(this.stateView, RUNNING_INDEX);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
running = this.running;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
running = this.shared ? Atomics.load(this.stateView, RUNNING_INDEX) : this.running;
|
|
363
|
+
}
|
|
364
|
+
this.#schedule(running);
|
|
248
365
|
};
|
|
249
366
|
}
|
|
250
367
|
//# sourceMappingURL=scheduler.js.map
|
package/lib/scheduler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxtedition/scheduler",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"tsd": "^0.33.0",
|
|
34
34
|
"typescript": "^5.9.3"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "214b6d008d71c3b3036dec274193fbb30d1bdb9f"
|
|
37
37
|
}
|