@nxtedition/scheduler 4.1.12 → 4.1.14
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 +85 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/limiter.d.ts +22 -0
- package/lib/limiter.d.ts.map +1 -1
- package/lib/limiter.js +107 -18
- package/lib/limiter.js.map +1 -1
- package/lib/queue.d.ts +1 -0
- package/lib/queue.d.ts.map +1 -1
- package/lib/queue.js +7 -0
- package/lib/queue.js.map +1 -1
- package/lib/scheduler.d.ts +29 -0
- package/lib/scheduler.d.ts.map +1 -1
- package/lib/scheduler.js +450 -11
- package/lib/scheduler.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -117,6 +117,27 @@ The global `max` is a hard cap across all workers — a worker that finds the gl
|
|
|
117
117
|
|
|
118
118
|
`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.
|
|
119
119
|
|
|
120
|
+
### Child Schedulers (hierarchical limits)
|
|
121
|
+
|
|
122
|
+
`scheduler.child(opts?)` creates a child that enforces an **additional** concurrency limit _on top of_ its parent. A task dispatched through a child runs only when it is admitted by **both** the child's own per-priority cap **and** the parent's overall `max`. This composes the classic "global pool of N, M per worker" shape: a shared parent caps total concurrency across the whole process while each worker uses a local child to cap its own share.
|
|
123
|
+
|
|
124
|
+
```js
|
|
125
|
+
// main.js — one shared global pool of 16
|
|
126
|
+
const sharedState = Scheduler.makeSharedState(16)
|
|
127
|
+
for (let i = 0; i < 4; i++) new Worker('./worker.js', { workerData: sharedState })
|
|
128
|
+
|
|
129
|
+
// worker.js — at most 4 concurrent reads on THIS worker, ≤16 across the whole process
|
|
130
|
+
const parent = new Scheduler(workerData)
|
|
131
|
+
const reads = parent.child({ concurrency: 4 })
|
|
132
|
+
const data = await reads.run(() => fs.readFile(path), 'high')
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
- `opts` mirrors the constructor (`{ concurrency }`), so children get their own per-priority caps too: `parent.child({ concurrency: { max: 4, low: 1 } })`. Omit it for an unlimited local cap (only the parent constrains).
|
|
136
|
+
- The child has its own independent **priority lottery and starvation prevention**; the parent's overall `max` is the global gate — a **soft limit** when the parent/root is shared (the same bounded read-then-increment overshoot across workers as a plain shared `Scheduler`; see the dispose note above). The parent's _own_ per-priority caps constrain only tasks submitted **directly** to the parent — child tasks see the parent solely as an overall `max`.
|
|
137
|
+
- Children may be **nested** arbitrarily; the tightest cap in the chain wins, and every level's `max` is enforced.
|
|
138
|
+
- A child is a local (non-shared) scheduler that delegates all global accounting — and, when the root is shared, all cross-thread waiting — up the parent chain; only the root touches the `SharedArrayBuffer`.
|
|
139
|
+
- `child[Symbol.dispose]()` returns the child's in-flight slots to the parent, rejects its queued `run()` promises, and unregisters it. Disposing a parent disposes its descendants. Children of a long-lived shared root live until process exit unless disposed — dispose short-lived children explicitly.
|
|
140
|
+
|
|
120
141
|
### UV Thread Pool Scheduling
|
|
121
142
|
|
|
122
143
|
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:
|
|
@@ -210,13 +231,17 @@ The overall concurrency ceiling (`Infinity` when unlimited). In shared mode this
|
|
|
210
231
|
|
|
211
232
|
`{ running, pending, queues, shared }` — locally running tasks, locally queued tasks, per-priority queue counts, and (shared mode only) the global `{ running, waiters }` counters. Allocates fresh objects on every read; poll accordingly.
|
|
212
233
|
|
|
234
|
+
### `scheduler.child(opts?): Scheduler`
|
|
235
|
+
|
|
236
|
+
Create a child scheduler that enforces an additional concurrency limit on top of this one (see [Child Schedulers](#child-schedulers-hierarchical-limits)). `opts` mirrors the constructor (`{ concurrency }`, a number or per-priority object); omit it for an unlimited local cap. A task runs only when admitted by both the child's cap and the parent's overall `max`. Returns a fully-featured `Scheduler` (`run` / `acquire` / `tryAcquire` / `release` / `stats` / `Symbol.dispose`). Throws if the parent is disposed.
|
|
237
|
+
|
|
213
238
|
### `Scheduler.makeSharedState(concurrency): SharedArrayBuffer`
|
|
214
239
|
|
|
215
240
|
Create shared state for cross-worker scheduling. `concurrency` must be `Infinity` or a non-negative integer that fits in a signed 32-bit integer (≤ 2,147,483,647) — the counter is stored as `Int32`.
|
|
216
241
|
|
|
217
242
|
### `scheduler[Symbol.dispose]()`
|
|
218
243
|
|
|
219
|
-
Disposes the scheduler: releases any global slots it still holds (shared mode), rejects queued `run()` promises with `Error('Scheduler is disposed')`, drops the reference to a pending shared-mode `Atomics.waitAsync`, and makes all further calls inert (`acquire` / `tryAcquire` return `false`; `run` rejects). Use when abandoning a shared-mode Scheduler with tasks still queued so the instance and its parked wait can be garbage-collected (it is otherwise kept alive until process exit so its held slots can be released). Works with `using`. Note that slots held by still-in-flight tasks are returned to the shared pool immediately — until those tasks actually finish, other workers can transiently admit more than `max` (the limit is soft by design).
|
|
244
|
+
Disposes the scheduler: releases any global slots it still holds (shared mode), rejects queued `run()` promises with `Error('Scheduler is disposed')`, drops the reference to a pending shared-mode `Atomics.waitAsync`, and makes all further calls inert (`acquire` / `tryAcquire` return `false`; `run` rejects). Use when abandoning a shared-mode Scheduler with tasks still queued so the instance and its parked wait can be garbage-collected (it is otherwise kept alive until process exit so its held slots can be released). Works with `using`. Note that slots held by still-in-flight tasks are returned to the shared pool immediately — until those tasks actually finish, other workers can transiently admit more than `max` (the limit is soft by design). Disposing a scheduler also disposes its [children](#child-schedulers-hierarchical-limits); disposing a child returns its in-flight slots to the parent and unregisters it.
|
|
220
245
|
|
|
221
246
|
### `parsePriority(value): number`
|
|
222
247
|
|
|
@@ -300,6 +325,23 @@ const ran = limiter.consume(
|
|
|
300
325
|
|
|
301
326
|
`consume` returns `true` if the callback ran immediately (tokens were available and nothing was queued ahead of it — the call refills the bucket from elapsed time first, so an idle or freshly created limiter answers `true` when the credit covers the request), or `false` if it was queued. Note the boundary is not airtight: a `false` (queued) task can still run synchronously _within_ the same call when the drain the call triggers reaches it immediately.
|
|
302
327
|
|
|
328
|
+
### Child Limiters (hierarchical rates)
|
|
329
|
+
|
|
330
|
+
`limiter.child(opts)` creates a child token bucket that enforces an **additional** rate _on top of_ its parent. A `consume` of N tokens through the child runs only when N tokens are available in **both** the child's own bucket **and** the parent chain's bucket(s), and the N tokens are debited from every level — exactly mirroring `Scheduler.child()`, for byte-rate instead of concurrency. The canonical shape is a shared parent capping the aggregate rate while each worker caps its own share:
|
|
331
|
+
|
|
332
|
+
```js
|
|
333
|
+
// main.js — 16 MB/s shared across the whole process
|
|
334
|
+
const sharedState = Limiter.makeSharedState(16_000_000)
|
|
335
|
+
for (let i = 0; i < 4; i++) new Worker('./worker.js', { workerData: sharedState })
|
|
336
|
+
|
|
337
|
+
// worker.js — at most 4 MB/s on THIS worker, ≤16 MB/s across the process
|
|
338
|
+
const parent = new Limiter(workerData)
|
|
339
|
+
const out = parent.child({ tokensPerSecond: 4_000_000 })
|
|
340
|
+
out.consume(() => send(chunk), chunk.length, 'high')
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Priorities, `stream()`, and the ~1s anti-starvation force-through all work as usual and apply per level (a forced item is charged into debt on the whole chain, so each level's long-run rate still holds). The child has its own refill timer; the parent needs no knowledge of its children. Children may be nested.
|
|
344
|
+
|
|
303
345
|
## API
|
|
304
346
|
|
|
305
347
|
### `new Limiter(opts)`
|
|
@@ -331,12 +373,54 @@ The configured rate (and bucket capacity).
|
|
|
331
373
|
|
|
332
374
|
Returns a `Transform` stream that rate-limits data passing through it. Each chunk consumes `chunk.length` tokens; a chunk with no non-negative-integer `length` (e.g. in `objectMode`) is treated as weightless (0 tokens) — it never waits on tokens, though it still preserves the limiter's queue ordering (if other work is already queued, it drains in turn rather than jumping ahead). `options` is forwarded to the underlying `Transform` (e.g. `objectMode`, `highWaterMark`). Destroying the stream while a chunk is still queued in the limiter does not push into the dead stream.
|
|
333
375
|
|
|
376
|
+
### `limiter.child(opts): Limiter`
|
|
377
|
+
|
|
378
|
+
Create a child limiter that enforces an additional rate on top of this one (see [Child Limiters](#child-limiters-hierarchical-rates)). `opts` mirrors the constructor (`{ tokensPerSecond }`). A `consume` runs only when its tokens fit both the child's bucket and the parent chain's, and is debited from both. Returns a fully-featured `Limiter` (`consume` / `tryConsume` / `stream` / `stats`).
|
|
379
|
+
|
|
334
380
|
### `Limiter.makeSharedState(tokensPerSecond): SharedArrayBuffer`
|
|
335
381
|
|
|
336
382
|
Create shared state for cross-worker rate limiting.
|
|
337
383
|
|
|
338
384
|
---
|
|
339
385
|
|
|
386
|
+
## Performance
|
|
387
|
+
|
|
388
|
+
Microbenchmarks from `bench.js` on an AMD EPYC (linux-x64, Node 26). `Mops/s` = millions of ops/sec; higher is better. Numbers are indicative and machine-dependent — run `node --expose-gc bench.js` to reproduce.
|
|
389
|
+
|
|
390
|
+
### Scheduler hot paths (single thread)
|
|
391
|
+
|
|
392
|
+
| Operation | Throughput |
|
|
393
|
+
| ----------------------------------------- | ----------- |
|
|
394
|
+
| `acquire`+`release` (unlimited, no queue) | ~110 Mops/s |
|
|
395
|
+
| `tryAcquire` fast path | ~150 Mops/s |
|
|
396
|
+
| `acquire`+`release` (SharedArrayBuffer) | ~38 Mops/s |
|
|
397
|
+
| queue drain (concurrency=1, batch) | ~37 Mops/s |
|
|
398
|
+
| `run()` (sync body, Promise per task) | ~4 Mops/s |
|
|
399
|
+
|
|
400
|
+
### `child()` overhead (single thread)
|
|
401
|
+
|
|
402
|
+
A child adds a local per-priority gate plus one parent-chain acquire/release per task:
|
|
403
|
+
|
|
404
|
+
| Operation | Throughput |
|
|
405
|
+
| ----------------------------------------------- | ---------- |
|
|
406
|
+
| `acquire`+`release` (parent only) | ~71 Mops/s |
|
|
407
|
+
| `acquire`+`release` (through 1 child) | ~36 Mops/s |
|
|
408
|
+
| `acquire`+`release` (through 2 nested children) | ~24 Mops/s |
|
|
409
|
+
| child queue drain (cap=1, batch) | ~20 Mops/s |
|
|
410
|
+
|
|
411
|
+
### With vs without per-worker `child()` (8 workers, shared global cap=8)
|
|
412
|
+
|
|
413
|
+
The overhead that matters in practice is end-to-end, where real per-task work dominates the extra bookkeeping. With realistic ~50µs tasks a per-worker `child()` costs only **~4%**:
|
|
414
|
+
|
|
415
|
+
| Workload (8 workers) | Plain | With `child(4)` | Overhead |
|
|
416
|
+
| ----------------------------------- | ------------ | --------------- | -------- |
|
|
417
|
+
| 0µs tasks (pure scheduler overhead) | ~1.45 Mops/s | ~1.38 Mops/s | ~5% |
|
|
418
|
+
| 50µs tasks (realistic) | ~132 Kops/s | ~127 Kops/s | ~4% |
|
|
419
|
+
|
|
420
|
+
> An earlier revision sharded the global `RUNNING`/`WAITERS` counters across cache lines to cut contention. Benchmarking on the x64 target showed it was a **net regression** (~25% slower at 32 workers): `RUNNING` is read on every acquire, so aggregating shards costs more coherency traffic than the single-line write contention it avoids. It was reverted to a single counter.
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
340
424
|
## License
|
|
341
425
|
|
|
342
426
|
MIT
|
package/lib/index.d.ts
CHANGED
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,yCAAyC;AACzC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAClD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,yCAAyC;AACzC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAClD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,yCAAyC;AACzC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
|
package/lib/limiter.d.ts
CHANGED
|
@@ -10,9 +10,31 @@ export declare class Limiter extends Queue {
|
|
|
10
10
|
pending: number;
|
|
11
11
|
queues: {
|
|
12
12
|
count: number;
|
|
13
|
+
deferred: number;
|
|
13
14
|
}[];
|
|
14
15
|
};
|
|
15
16
|
get tokensPerSecond(): number;
|
|
17
|
+
/**
|
|
18
|
+
* Create a child Limiter that enforces an ADDITIONAL token-rate limit on top of this
|
|
19
|
+
* (the parent). A consume of N tokens through the child runs only when N tokens are
|
|
20
|
+
* available in BOTH the child's own bucket AND the parent chain's bucket(s), and the N
|
|
21
|
+
* tokens are debited from every level.
|
|
22
|
+
*
|
|
23
|
+
* Canonical use: a shared parent caps the aggregate rate (e.g. 16 MB/s across the whole
|
|
24
|
+
* process) while each worker uses a local child to cap its own share (e.g. 4 MB/s):
|
|
25
|
+
*
|
|
26
|
+
* const parent = new Limiter(Limiter.makeSharedState(16_000_000)) // global rate
|
|
27
|
+
* const out = parent.child({ tokensPerSecond: 4_000_000 }) // this worker's rate
|
|
28
|
+
* out.consume(() => send(chunk), chunk.length, 'high')
|
|
29
|
+
*
|
|
30
|
+
* `opts` mirrors the constructor's options. Priorities, streaming, and the ~1s
|
|
31
|
+
* anti-starvation force-through all work as usual and apply per level (a forced item is
|
|
32
|
+
* debited into debt on the whole chain). The child has its own refill timer; the parent
|
|
33
|
+
* needs no knowledge of its children.
|
|
34
|
+
*/
|
|
35
|
+
child(opts: {
|
|
36
|
+
tokensPerSecond: number;
|
|
37
|
+
}): Limiter;
|
|
16
38
|
constructor(opts: SharedArrayBuffer | {
|
|
17
39
|
tokensPerSecond: number;
|
|
18
40
|
});
|
package/lib/limiter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limiter.d.ts","sourceRoot":"","sources":["../src/limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAuC,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAqCtF,qBAAa,OAAQ,SAAQ,KAAK;;IAChC,OAAO,CAAC,SAAS,CAAY;
|
|
1
|
+
{"version":3,"file":"limiter.d.ts","sourceRoot":"","sources":["../src/limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAuC,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAqCtF,qBAAa,OAAQ,SAAQ,KAAK;;IAChC,OAAO,CAAC,SAAS,CAAY;IAgB7B,OAAO,CAAC,OAAO,CAAI;IAoBnB,MAAM,CAAC,eAAe,CAAC,eAAe,EAAE,MAAM;IAS9C,IAAI,KAAK;;;;;;;MAMR;IAED,IAAI,eAAe,WAElB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,IAAI,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;gBAMrC,IAAI,EAAE,iBAAiB,GAAG;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE;IA6BjE,MAAM,CAAC,QAAQ,GAAE,QAAuB,EAAE,OAAO,CAAC,EAAE,gBAAgB;IA8BpE,OAAO,CAAC,EAAE,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO;IACvE,OAAO,CAAC,CAAC,EACP,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,EAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,MAAM,EAAE,CAAC,GACR,OAAO;IA0EV,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAmUnC"}
|
package/lib/limiter.js
CHANGED
|
@@ -37,6 +37,14 @@ export class Limiter extends Queue {
|
|
|
37
37
|
// plain write instead of a lock-prefixed Atomics RMW. Cold paths (#refill credit,
|
|
38
38
|
// force-through) keep Atomics unconditionally for simplicity.
|
|
39
39
|
#shared;
|
|
40
|
+
// Set by child(): a child Limiter applies its own (typically smaller) rate ON TOP of
|
|
41
|
+
// this parent's bucket. Every consume through the child is gated by — and debited from
|
|
42
|
+
// — both buckets, so a shared parent + per-worker child gives "global rate X, per-worker
|
|
43
|
+
// rate Y". Children only ever READ the parent reference here; the parent is unaware of
|
|
44
|
+
// its children (no list, no driving) — a child's own 100ms refill timer re-checks the
|
|
45
|
+
// parent bucket, so a child task blocked on parent tokens dispatches within a tick of
|
|
46
|
+
// them accruing. Children may be nested arbitrarily.
|
|
47
|
+
#parent = null;
|
|
40
48
|
pending = 0;
|
|
41
49
|
#refillTimer;
|
|
42
50
|
// True while #refillTimer is scheduled to fire. Without this guard every #refill
|
|
@@ -67,12 +75,35 @@ export class Limiter extends Queue {
|
|
|
67
75
|
return {
|
|
68
76
|
tokens: this.stateView[TOKENS_INDEX],
|
|
69
77
|
pending: this.pending,
|
|
70
|
-
queues: this.queues.map((q) => ({ count: q.cnt })),
|
|
78
|
+
queues: this.queues.map((q) => ({ count: q.cnt, deferred: q.deferred })),
|
|
71
79
|
};
|
|
72
80
|
}
|
|
73
81
|
get tokensPerSecond() {
|
|
74
82
|
return this.stateView[LIMIT_INDEX];
|
|
75
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a child Limiter that enforces an ADDITIONAL token-rate limit on top of this
|
|
86
|
+
* (the parent). A consume of N tokens through the child runs only when N tokens are
|
|
87
|
+
* available in BOTH the child's own bucket AND the parent chain's bucket(s), and the N
|
|
88
|
+
* tokens are debited from every level.
|
|
89
|
+
*
|
|
90
|
+
* Canonical use: a shared parent caps the aggregate rate (e.g. 16 MB/s across the whole
|
|
91
|
+
* process) while each worker uses a local child to cap its own share (e.g. 4 MB/s):
|
|
92
|
+
*
|
|
93
|
+
* const parent = new Limiter(Limiter.makeSharedState(16_000_000)) // global rate
|
|
94
|
+
* const out = parent.child({ tokensPerSecond: 4_000_000 }) // this worker's rate
|
|
95
|
+
* out.consume(() => send(chunk), chunk.length, 'high')
|
|
96
|
+
*
|
|
97
|
+
* `opts` mirrors the constructor's options. Priorities, streaming, and the ~1s
|
|
98
|
+
* anti-starvation force-through all work as usual and apply per level (a forced item is
|
|
99
|
+
* debited into debt on the whole chain). The child has its own refill timer; the parent
|
|
100
|
+
* needs no knowledge of its children.
|
|
101
|
+
*/
|
|
102
|
+
child(opts) {
|
|
103
|
+
const c = new Limiter(opts);
|
|
104
|
+
c.#parent = this;
|
|
105
|
+
return c;
|
|
106
|
+
}
|
|
76
107
|
constructor(opts) {
|
|
77
108
|
super();
|
|
78
109
|
// util.types.isSharedArrayBuffer instead of instanceof: a SAB from another realm
|
|
@@ -166,6 +197,7 @@ export class Limiter extends Queue {
|
|
|
166
197
|
this.pending += 1;
|
|
167
198
|
queue.arr.push(fn, bytes, opaque);
|
|
168
199
|
queue.cnt += 1;
|
|
200
|
+
queue.deferred += 1;
|
|
169
201
|
if (queue.cnt === 1) {
|
|
170
202
|
this.nonEmptyMask |= 1 << queue.i;
|
|
171
203
|
}
|
|
@@ -190,7 +222,10 @@ export class Limiter extends Queue {
|
|
|
190
222
|
if (!Number.isInteger(bytes) || bytes < 0 || bytes > MAX_TOKENS) {
|
|
191
223
|
throw new Error('Invalid bytes');
|
|
192
224
|
}
|
|
193
|
-
|
|
225
|
+
// Refill so the (chain) check sees freshly accrued tokens. For a child we refill
|
|
226
|
+
// unconditionally — our own bucket may hold enough yet the parent chain still need
|
|
227
|
+
// crediting before #tryConsumeTokens consults it.
|
|
228
|
+
if (this.#parent !== null || this.stateView[TOKENS_INDEX] < bytes) {
|
|
194
229
|
this.#refill();
|
|
195
230
|
}
|
|
196
231
|
return this.pending === 0 && this.#tryConsumeTokens(bytes);
|
|
@@ -215,6 +250,13 @@ export class Limiter extends Queue {
|
|
|
215
250
|
if (tokens < bytes) {
|
|
216
251
|
return false;
|
|
217
252
|
}
|
|
253
|
+
// Child (see child()): the request must also fit the parent chain's bucket(s), and
|
|
254
|
+
// is debited from every level. Check the parent FIRST (it consumes the parent
|
|
255
|
+
// chain on success); only debit our own bucket once the whole chain has granted, so
|
|
256
|
+
// a parent shortfall needs no rollback (we haven't touched our bucket yet).
|
|
257
|
+
if (this.#parent !== null && !this.#parent.#tryConsumeTokens(bytes)) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
218
260
|
if (this.#shared) {
|
|
219
261
|
Atomics.sub(this.stateView, TOKENS_INDEX, bytes);
|
|
220
262
|
}
|
|
@@ -224,21 +266,44 @@ export class Limiter extends Queue {
|
|
|
224
266
|
}
|
|
225
267
|
return true;
|
|
226
268
|
}
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
269
|
+
// True iff some bucket in the chain BLOCKS this request (tokens < bytes) while already
|
|
270
|
+
// at capacity (tokens >= its rate) — i.e. that level can never accrue enough, so the
|
|
271
|
+
// request is oversized for it and waiting is pointless. When no blocking level is full,
|
|
272
|
+
// every shortfall is temporary and the request should wait, not force into debt. For a
|
|
273
|
+
// non-child this is exactly the old `tokens >= LIMIT` test (the caller already knows
|
|
274
|
+
// tokens < bytes from the failed scan).
|
|
275
|
+
#chainHasFullBlocker(bytes) {
|
|
276
|
+
const tok = this.stateView[TOKENS_INDEX];
|
|
277
|
+
if (tok < bytes && tok >= this.stateView[LIMIT_INDEX]) {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
for (let n = this.#parent; n !== null; n = n.#parent) {
|
|
281
|
+
const t = n.stateView[TOKENS_INDEX];
|
|
282
|
+
if (t < bytes && t >= n.stateView[LIMIT_INDEX]) {
|
|
283
|
+
return true;
|
|
240
284
|
}
|
|
241
285
|
}
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
// Debit `bytes` from this bucket AND every ancestor unconditionally, driving them into
|
|
289
|
+
// debt if needed. Used by the drain loop's anti-starvation / oversized force-through so
|
|
290
|
+
// a forced item is charged to the whole chain (mirroring #tryConsumeTokens' debit), not
|
|
291
|
+
// just the local bucket. Subsequent refills repay each level's debt before it drains
|
|
292
|
+
// anything else, preserving the long-run rate at every level.
|
|
293
|
+
#forceConsume(bytes) {
|
|
294
|
+
if (this.#shared) {
|
|
295
|
+
Atomics.sub(this.stateView, TOKENS_INDEX, bytes);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
this.stateView[TOKENS_INDEX] -= bytes;
|
|
299
|
+
}
|
|
300
|
+
if (this.#parent !== null) {
|
|
301
|
+
this.#parent.#forceConsume(bytes);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Credit tokens accrued since the last refill, without draining the queue. Split out of
|
|
305
|
+
// #refill so a child can refresh its parent chain's buckets before a chain check.
|
|
306
|
+
#credit() {
|
|
242
307
|
const rate = this.tokensPerSecond;
|
|
243
308
|
const currentToken = this.stateView[TOKENS_INDEX];
|
|
244
309
|
const refillTime = this.stateView[REFILL_INDEX];
|
|
@@ -308,6 +373,29 @@ export class Limiter extends Queue {
|
|
|
308
373
|
// until it is worth at least one whole token.
|
|
309
374
|
}
|
|
310
375
|
}
|
|
376
|
+
}
|
|
377
|
+
// fromTimer is true only for the 100ms cadence timer callback: stall bookkeeping
|
|
378
|
+
// ticks on the timer (not on consume-triggered drains) so its time base is real
|
|
379
|
+
// elapsed time, independent of traffic volume.
|
|
380
|
+
#refill(fromTimer = false) {
|
|
381
|
+
if (fromTimer && this.pending > 0) {
|
|
382
|
+
// A queue with items whose front didn't dispatch since the last tick is
|
|
383
|
+
// stalling (every dispatch from a queue resets its counter in the drain
|
|
384
|
+
// loop below). Crossing STALL_TICKS arms the force-through in the drain.
|
|
385
|
+
for (let p = 0; p < this.queues.length; p++) {
|
|
386
|
+
const q = this.queues[p];
|
|
387
|
+
if (q.cnt > 0 && ++q.stall >= STALL_TICKS) {
|
|
388
|
+
this.#hasStalled = true;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
this.#credit();
|
|
393
|
+
// Keep every ancestor bucket fresh too, so the chain check in #tryConsumeTokens
|
|
394
|
+
// below sees tokens accrued on the parent(s) since their last own refill. A child
|
|
395
|
+
// is gated by BOTH its own bucket and the parent chain (see child()).
|
|
396
|
+
for (let p = this.#parent; p !== null; p = p.#parent) {
|
|
397
|
+
p.#credit();
|
|
398
|
+
}
|
|
311
399
|
try {
|
|
312
400
|
// NB: this loop is intentionally NOT gated on `tokens > 0`. Weightless (0-byte)
|
|
313
401
|
// tasks always satisfy #tryConsumeTokens regardless of the token balance, so they
|
|
@@ -330,7 +418,7 @@ export class Limiter extends Queue {
|
|
|
330
418
|
const q = this.queues[p];
|
|
331
419
|
if (q.cnt > 0 && q.stall >= STALL_TICKS) {
|
|
332
420
|
if (!this.#tryConsumeTokens(q.arr[q.idx + 1])) {
|
|
333
|
-
|
|
421
|
+
this.#forceConsume(q.arr[q.idx + 1]);
|
|
334
422
|
}
|
|
335
423
|
queue = q;
|
|
336
424
|
break;
|
|
@@ -368,8 +456,9 @@ export class Limiter extends Queue {
|
|
|
368
456
|
// forever. Force the highest-priority such task through into debt; the
|
|
369
457
|
// tokens < 0 result drops out of this loop and subsequent refills repay the
|
|
370
458
|
// debt before anything else drains — the correct throttle for an over-large unit.
|
|
371
|
-
if (highest !== null &&
|
|
372
|
-
|
|
459
|
+
if (highest !== null &&
|
|
460
|
+
this.#chainHasFullBlocker(highest.arr[highest.idx + 1])) {
|
|
461
|
+
this.#forceConsume(highest.arr[highest.idx + 1]);
|
|
373
462
|
queue = highest;
|
|
374
463
|
}
|
|
375
464
|
else {
|
package/lib/limiter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limiter.js","sourceRoot":"","sources":["../src/limiter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"limiter.js","sourceRoot":"","sources":["../src/limiter.ts"],"names":[],"mappings":"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"}
|
package/lib/queue.d.ts
CHANGED
package/lib/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,GAAG,SAAI;IACP,GAAG,SAAI;IACP,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAK;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,GAAG,SAAI;IACP,GAAG,SAAI;IACP,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAK;IAOxB,QAAQ,SAAI;IAIZ,KAAK,SAAI;IAGT,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;gBACN,CAAC,EAAE,MAAM;CAGtB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAEzD,MAAM,MAAM,QAAQ,GAClB,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAExF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,CA8BhE;AAsBD,eAAO,MAAM,SAAS,EAAE,MAAM,EAQ7B,CAAA;AAED,qBAAa,KAAK;IAChB,MAAM,CAAC,QAAQ,CAAC,MAAM,MAAK;IAC3B,MAAM,CAAC,QAAQ,CAAC,KAAK,MAAK;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAK;IACxB,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAI;IAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAI;IACxB,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAI;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAI;IAE3B,OAAO,CAAC,OAAO,CAAI;IAKnB,SAAS,CAAC,YAAY,SAAI;IAG1B,SAAS,CAAC,MAAM,cAQf;IAaD,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM;CAiCzD"}
|
package/lib/queue.js
CHANGED
|
@@ -2,6 +2,13 @@ export class FastQueue {
|
|
|
2
2
|
idx = 0;
|
|
3
3
|
cnt = 0;
|
|
4
4
|
arr = [];
|
|
5
|
+
// Cumulative count of tasks ever enqueued (deferred) into this priority queue —
|
|
6
|
+
// i.e. work that could not run immediately and had to wait. Monotonic since
|
|
7
|
+
// construction; never reset (clear() leaves it). A saturation/“too busy” flow
|
|
8
|
+
// metric: diff it across a window to get deferrals-per-interval at this priority,
|
|
9
|
+
// which (unlike the `cnt` depth gauge) can't miss a transient that came and went
|
|
10
|
+
// between two samples.
|
|
11
|
+
deferred = 0;
|
|
5
12
|
// Consecutive Limiter timer ticks during which this queue had items but dispatched
|
|
6
13
|
// nothing (front blocked on tokens). Unused by Scheduler. See Limiter's
|
|
7
14
|
// anti-starvation force-through.
|
package/lib/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IACpB,GAAG,GAAG,CAAC,CAAA;IACP,GAAG,GAAG,CAAC,CAAA;IACP,GAAG,GAAmB,EAAE,CAAA;IACxB,mFAAmF;IACnF,wEAAwE;IACxE,iCAAiC;IACjC,KAAK,GAAG,CAAC,CAAA;IACT,iFAAiF;IACjF,8CAA8C;IACrC,CAAC,CAAQ;IAClB,YAAY,CAAS;QACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IACZ,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
|
package/lib/scheduler.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export declare class Scheduler extends Queue {
|
|
|
25
25
|
pending: number;
|
|
26
26
|
queues: {
|
|
27
27
|
count: number;
|
|
28
|
+
deferred: number;
|
|
28
29
|
}[];
|
|
29
30
|
shared: {
|
|
30
31
|
running: number;
|
|
@@ -37,6 +38,34 @@ export declare class Scheduler extends Queue {
|
|
|
37
38
|
concurrency?: ConcurrencyOptions;
|
|
38
39
|
});
|
|
39
40
|
[kOnExit](): void;
|
|
41
|
+
/**
|
|
42
|
+
* Create a child Scheduler that enforces an ADDITIONAL concurrency limit on top of this
|
|
43
|
+
* (the parent). A task dispatched through the child runs only when it is admitted by BOTH
|
|
44
|
+
* the child's own per-priority cap (counting the child's running tasks) AND the parent's
|
|
45
|
+
* overall `max` (counting all tasks in the parent's pool, across workers when the parent
|
|
46
|
+
* is shared).
|
|
47
|
+
*
|
|
48
|
+
* Canonical use: a shared parent caps global concurrency (e.g. 16 reads across the whole
|
|
49
|
+
* process) while each worker uses a child to cap its local share (e.g. 4):
|
|
50
|
+
*
|
|
51
|
+
* const parent = new Scheduler(Scheduler.makeSharedState(16)) // global pool
|
|
52
|
+
* const reads = parent.child({ concurrency: 4 }) // this worker's cap
|
|
53
|
+
* await reads.run(() => fs.readFile(path), 'high')
|
|
54
|
+
*
|
|
55
|
+
* `opts` mirrors the constructor's options (so per-priority caps work too:
|
|
56
|
+
* `parent.child({ concurrency: { max: 4, low: 1 } })`); omit it for an unlimited local
|
|
57
|
+
* cap (only the parent constrains).
|
|
58
|
+
*
|
|
59
|
+
* Priorities: the child has its own independent per-priority caps and starvation-
|
|
60
|
+
* prevention lottery; the parent's overall `max` is the global gate (a SOFT limit when
|
|
61
|
+
* the parent/root is shared — the same bounded read-then-increment overshoot as a plain
|
|
62
|
+
* shared Scheduler). The parent's own per-priority caps constrain only tasks submitted
|
|
63
|
+
* DIRECTLY to the parent — child tasks see the parent solely as an overall `max`.
|
|
64
|
+
* Children may be nested arbitrarily.
|
|
65
|
+
*/
|
|
66
|
+
child(opts?: {
|
|
67
|
+
concurrency?: ConcurrencyOptions;
|
|
68
|
+
}): Scheduler;
|
|
40
69
|
run<T>(fn: () => PromiseLike<T> | T, priority?: Priority): Promise<T>;
|
|
41
70
|
run<T, U>(fn: (opaque: U) => PromiseLike<T> | T, priority: Priority, opaque: U): Promise<T>;
|
|
42
71
|
acquire(fn: () => unknown, priority?: Priority): boolean;
|
package/lib/scheduler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,EAAuB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,EAAuB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAyChG,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;AAoGL,QAAA,MAAM,OAAO,eAA4B,CAAA;AAQzC,qBAAa,SAAU,SAAQ,KAAK;;IAClC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAgCjC,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,SAAS,CAAQ;IAQzB,OAAO,CAAC,IAAI,CAAQ;IA2BpB,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM;IAmB1C,IAAI,WAAW,WAGd;IAED,IAAI,KAAK;;;;;;;;;;;MAYR;gBAGC,iBAAiB,EAAE,iBAAiB,GAAG;QAAE,WAAW,CAAC,EAAE,kBAAkB,CAAA;KAAE,EAC3E,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,kBAAkB,CAAA;KAAE;IAyDhD,CAAC,OAAO,CAAC;IAuCT;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,kBAAkB,CAAA;KAAE,GAAG,SAAS;IA2B7D,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;IAkD3F,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;IA0J1F,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO;IA8ZxC,OAAO,aA4CL;IAEF,CAAC,MAAM,CAAC,OAAO,CAAC;CAuEjB"}
|
package/lib/scheduler.js
CHANGED
|
@@ -13,6 +13,12 @@ import { FastQueue, parsePriority, Queue } from "./queue.js";
|
|
|
13
13
|
// loads WAITERS to decide whether to skip Atomics.notify does NOT invalidate
|
|
14
14
|
// the cache line carrying RUNNING — under N-way contention that would
|
|
15
15
|
// penalize every concurrent acquirer on every release.
|
|
16
|
+
//
|
|
17
|
+
// (An earlier revision sharded RUNNING/WAITERS across cache lines + a separate
|
|
18
|
+
// futex word. Benchmarking on the x64 target showed it was a net regression:
|
|
19
|
+
// RUNNING is read on every acquire, so aggregating shards costs more coherency
|
|
20
|
+
// traffic than the single-line write contention it avoids. Reverted to one
|
|
21
|
+
// counter; the futex is RUNNING itself, which makes waitAsync self-correcting.)
|
|
16
22
|
const RUNNING_INDEX = 0;
|
|
17
23
|
const MAGIC_INDEX = 8;
|
|
18
24
|
const CONCURRENCY_INDEX = 16;
|
|
@@ -130,6 +136,28 @@ export class Scheduler extends Queue {
|
|
|
130
136
|
// bypasses per-priority limits to prevent starvation — without this hard cap, the
|
|
131
137
|
// bypass could push running above max during drain.
|
|
132
138
|
#max;
|
|
139
|
+
// ---- child() hierarchy ----
|
|
140
|
+
// A child Scheduler enforces its OWN (local, per-priority) concurrency cap on top of its
|
|
141
|
+
// parent's overall `max`: a task dispatched through a child must be admitted by both.
|
|
142
|
+
// Children delegate all global-capacity accounting (and, when the root is shared, all
|
|
143
|
+
// cross-thread waiting) up the parent chain via #tryAcquireGlobal / #releaseGlobal, so
|
|
144
|
+
// only the root ever touches the SharedArrayBuffer. See child().
|
|
145
|
+
#parent = null;
|
|
146
|
+
#children = null;
|
|
147
|
+
// For a node that is itself a child: `running` counts ALL slots this node holds globally
|
|
148
|
+
// — its own direct tasks PLUS every descendant's (a descendant's #tryAcquireGlobal
|
|
149
|
+
// increments it up the chain). That total is what this node's hard `#max` and
|
|
150
|
+
// #tryAcquireGlobal measure. But the node's PER-PRIORITY caps apply only to its OWN
|
|
151
|
+
// directly-submitted tasks, so those are measured against #directRunning (incremented
|
|
152
|
+
// solely by this node's own dispatch). For a leaf child the two are equal; they diverge
|
|
153
|
+
// only for an intermediate node used both as a pool and directly. Unused on the root.
|
|
154
|
+
#directRunning = 0;
|
|
155
|
+
// Round-robin start offset across #children, advanced once per dispatch pass so no
|
|
156
|
+
// sibling can monopolise freed global capacity when the pool is over-subscribed.
|
|
157
|
+
#driveCursor = 0;
|
|
158
|
+
// Re-entrancy guard for the hierarchy dispatch loop (#driveLoop), distinct from
|
|
159
|
+
// `releasing` which guards the non-hierarchy #schedule.
|
|
160
|
+
#driving = false;
|
|
133
161
|
running = 0;
|
|
134
162
|
pending = 0;
|
|
135
163
|
releasing = false;
|
|
@@ -190,7 +218,7 @@ export class Scheduler extends Queue {
|
|
|
190
218
|
return {
|
|
191
219
|
running: this.running,
|
|
192
220
|
pending: this.pending,
|
|
193
|
-
queues: this.queues.map((q) => ({ count: q.cnt })),
|
|
221
|
+
queues: this.queues.map((q) => ({ count: q.cnt, deferred: q.deferred })),
|
|
194
222
|
shared: this.shared
|
|
195
223
|
? {
|
|
196
224
|
running: Atomics.load(this.stateView, RUNNING_INDEX),
|
|
@@ -274,16 +302,66 @@ export class Scheduler extends Queue {
|
|
|
274
302
|
// Atomics.sub(WAITERS, 1) in its .then handler would normally pair the
|
|
275
303
|
// increment from #maybeWait — but the .then handler sees dead===true
|
|
276
304
|
// and skips. Drain WAITERS here to keep the cross-thread counter honest.
|
|
277
|
-
if (this.#waitPromise != null) {
|
|
305
|
+
if (this.shared && this.#waitPromise != null) {
|
|
278
306
|
Atomics.sub(this.stateView, WAITERS_INDEX, 1);
|
|
279
307
|
}
|
|
280
|
-
if (released > 0) {
|
|
308
|
+
if (released > 0 && this.shared) {
|
|
281
309
|
Atomics.sub(this.stateView, RUNNING_INDEX, released);
|
|
282
310
|
if (this.stateView[WAITERS_INDEX] > 0) {
|
|
283
311
|
Atomics.notify(this.stateView, RUNNING_INDEX, released);
|
|
284
312
|
}
|
|
285
313
|
}
|
|
286
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* Create a child Scheduler that enforces an ADDITIONAL concurrency limit on top of this
|
|
317
|
+
* (the parent). A task dispatched through the child runs only when it is admitted by BOTH
|
|
318
|
+
* the child's own per-priority cap (counting the child's running tasks) AND the parent's
|
|
319
|
+
* overall `max` (counting all tasks in the parent's pool, across workers when the parent
|
|
320
|
+
* is shared).
|
|
321
|
+
*
|
|
322
|
+
* Canonical use: a shared parent caps global concurrency (e.g. 16 reads across the whole
|
|
323
|
+
* process) while each worker uses a child to cap its local share (e.g. 4):
|
|
324
|
+
*
|
|
325
|
+
* const parent = new Scheduler(Scheduler.makeSharedState(16)) // global pool
|
|
326
|
+
* const reads = parent.child({ concurrency: 4 }) // this worker's cap
|
|
327
|
+
* await reads.run(() => fs.readFile(path), 'high')
|
|
328
|
+
*
|
|
329
|
+
* `opts` mirrors the constructor's options (so per-priority caps work too:
|
|
330
|
+
* `parent.child({ concurrency: { max: 4, low: 1 } })`); omit it for an unlimited local
|
|
331
|
+
* cap (only the parent constrains).
|
|
332
|
+
*
|
|
333
|
+
* Priorities: the child has its own independent per-priority caps and starvation-
|
|
334
|
+
* prevention lottery; the parent's overall `max` is the global gate (a SOFT limit when
|
|
335
|
+
* the parent/root is shared — the same bounded read-then-increment overshoot as a plain
|
|
336
|
+
* shared Scheduler). The parent's own per-priority caps constrain only tasks submitted
|
|
337
|
+
* DIRECTLY to the parent — child tasks see the parent solely as an overall `max`.
|
|
338
|
+
* Children may be nested arbitrarily.
|
|
339
|
+
*/
|
|
340
|
+
child(opts) {
|
|
341
|
+
if (this.dead) {
|
|
342
|
+
throw new Error('Scheduler is disposed');
|
|
343
|
+
}
|
|
344
|
+
// A child is always a local (non-shared) Scheduler: it owns no SharedArrayBuffer and
|
|
345
|
+
// delegates every global-capacity decision to the parent chain. No opts → unlimited
|
|
346
|
+
// local cap (`{}`), so only the parent constrains. (Pass an explicit `{}` rather than
|
|
347
|
+
// relying on an optional constructor param, keeping the public constructor signature
|
|
348
|
+
// unchanged.)
|
|
349
|
+
const c = new Scheduler(opts ?? {});
|
|
350
|
+
c.#parent = this;
|
|
351
|
+
(this.#children ??= []).push(c);
|
|
352
|
+
return c;
|
|
353
|
+
}
|
|
354
|
+
// The root of this hierarchy (itself when not a child). Depth is tiny in practice.
|
|
355
|
+
#root() {
|
|
356
|
+
let n = this.#parent;
|
|
357
|
+
if (n === null) {
|
|
358
|
+
return this;
|
|
359
|
+
}
|
|
360
|
+
while (n.#parent !== null) {
|
|
361
|
+
n = n.#parent;
|
|
362
|
+
}
|
|
363
|
+
return n;
|
|
364
|
+
}
|
|
287
365
|
run(fn, priority = Queue.NORMAL, opaque) {
|
|
288
366
|
if (typeof fn !== 'function') {
|
|
289
367
|
// Validate up front: a queued non-function would otherwise detonate later
|
|
@@ -299,13 +377,19 @@ export class Scheduler extends Queue {
|
|
|
299
377
|
reject(new Error('Scheduler is disposed'));
|
|
300
378
|
return;
|
|
301
379
|
}
|
|
302
|
-
// A hard cap of 0 can never dispatch anything (even the
|
|
303
|
-
// gated on running < max), so the promise would hang forever.
|
|
304
|
-
// mirroring the disposed-scheduler rejection above.
|
|
380
|
+
// A hard cap of 0 anywhere in the chain can never dispatch anything (even the
|
|
381
|
+
// lottery bypass is gated on running < max), so the promise would hang forever.
|
|
382
|
+
// Fail fast, mirroring the disposed-scheduler rejection above.
|
|
305
383
|
if (this.#max === 0) {
|
|
306
384
|
reject(new Error('Scheduler concurrency is 0'));
|
|
307
385
|
return;
|
|
308
386
|
}
|
|
387
|
+
for (let n = this.#parent; n !== null; n = n.#parent) {
|
|
388
|
+
if (n.#max === 0) {
|
|
389
|
+
reject(new Error('Scheduler concurrency is 0'));
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
309
393
|
const ctx = { resolve, reject, fn, opaque };
|
|
310
394
|
const p = parsePriority(priority);
|
|
311
395
|
if (this.queues[p + 3].cnt === 0 && this.#tryAcquire(p)) {
|
|
@@ -332,6 +416,22 @@ export class Scheduler extends Queue {
|
|
|
332
416
|
if (this.dead) {
|
|
333
417
|
return false;
|
|
334
418
|
}
|
|
419
|
+
// In a child() hierarchy, a hard cap of 0 anywhere in the chain can never dispatch this
|
|
420
|
+
// work: queuing it would strand the item AND, under a shared root, busy-spin #driveLoop's
|
|
421
|
+
// lost-race retry (a structurally-dead subtree the loop mistakes for a transient race).
|
|
422
|
+
// Refuse up front and enqueue nothing. (A plain, non-hierarchy max-0 scheduler keeps its
|
|
423
|
+
// existing contract of queuing the task — it simply never dispatches; see run(), which
|
|
424
|
+
// rejects max-0 either way.)
|
|
425
|
+
if (this.#parent !== null || this.#children !== null) {
|
|
426
|
+
if (this.#max === 0) {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
for (let n = this.#parent; n !== null; n = n.#parent) {
|
|
430
|
+
if (n.#max === 0) {
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
335
435
|
const p = priority == null ? Queue.NORMAL : parsePriority(priority);
|
|
336
436
|
// Snapshot RUNNING *before* the capacity check. If a remote release lands
|
|
337
437
|
// between a failed #tryAcquire and the Atomics.waitAsync in #maybeWait, its
|
|
@@ -357,11 +457,17 @@ export class Scheduler extends Queue {
|
|
|
357
457
|
const queue = this.queues[p + 3];
|
|
358
458
|
queue.arr.push(fn, opaque);
|
|
359
459
|
queue.cnt += 1;
|
|
460
|
+
queue.deferred += 1;
|
|
360
461
|
if (queue.cnt === 1) {
|
|
361
462
|
this.nonEmptyMask |= 1 << queue.i;
|
|
362
463
|
}
|
|
363
464
|
this.pending += 1;
|
|
364
|
-
if (this
|
|
465
|
+
if (this.#parent !== null || this.#children !== null) {
|
|
466
|
+
// Part of a child() hierarchy — dispatch (and, for a shared root, parking) is
|
|
467
|
+
// coordinated from the root across the whole tree.
|
|
468
|
+
this.#root().#driveLoop();
|
|
469
|
+
}
|
|
470
|
+
else if (this.shared) {
|
|
365
471
|
const fresh = this.#maybeWait(expected);
|
|
366
472
|
if (fresh !== -1) {
|
|
367
473
|
this.#schedule(fresh);
|
|
@@ -426,7 +532,18 @@ export class Scheduler extends Queue {
|
|
|
426
532
|
}
|
|
427
533
|
Atomics.sub(this.stateView, WAITERS_INDEX, 1);
|
|
428
534
|
this.#waitPromise = null;
|
|
429
|
-
this
|
|
535
|
+
// Re-dispatch via the path matching this instance's CURRENT shape, not the one it had
|
|
536
|
+
// when it parked: child() may have been called on this (formerly plain) shared
|
|
537
|
+
// scheduler while it was parked here, turning it into a hierarchy node. Routing
|
|
538
|
+
// through #schedule would only drain this node's own direct queue and strand the new
|
|
539
|
+
// subtree work; #driveLoop drives the whole tree. (acquire()/release() pick the
|
|
540
|
+
// dispatcher the same way.)
|
|
541
|
+
if (this.#parent !== null || this.#children !== null) {
|
|
542
|
+
this.#root().#driveLoop();
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
this.#schedule(this.stateView[RUNNING_INDEX]);
|
|
546
|
+
}
|
|
430
547
|
});
|
|
431
548
|
return -1;
|
|
432
549
|
}
|
|
@@ -441,6 +558,24 @@ export class Scheduler extends Queue {
|
|
|
441
558
|
return false;
|
|
442
559
|
}
|
|
443
560
|
const limit = this.#limits[priority + 3];
|
|
561
|
+
if (this.#parent !== null) {
|
|
562
|
+
// Child: enforce the local per-priority cap (against this node's own DIRECT running
|
|
563
|
+
// count, not descendant slots), AND this node's overall #max against its whole subtree
|
|
564
|
+
// (this.running = direct + descendants). For a leaf the two coincide, but for an
|
|
565
|
+
// intermediate node whose descendants already hold slots the subtree check is what
|
|
566
|
+
// keeps a direct task from pushing the node past its own max (#drainSelf gates the
|
|
567
|
+
// same way). Then take a global slot from the parent chain — the parent's
|
|
568
|
+
// #tryAcquireGlobal performs the shared Atomics, so the child never does.
|
|
569
|
+
if (this.#directRunning >= limit || this.running >= this.#max) {
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
if (!this.#parent.#tryAcquireGlobal()) {
|
|
573
|
+
return false;
|
|
574
|
+
}
|
|
575
|
+
this.#directRunning += 1;
|
|
576
|
+
this.running += 1;
|
|
577
|
+
return true;
|
|
578
|
+
}
|
|
444
579
|
if (this.shared) {
|
|
445
580
|
// We use non-atomic access here as an optimization and treat the concurrency limit as a soft limit.
|
|
446
581
|
if (this.stateView[RUNNING_INDEX] < limit) {
|
|
@@ -457,6 +592,55 @@ export class Scheduler extends Queue {
|
|
|
457
592
|
}
|
|
458
593
|
return false;
|
|
459
594
|
}
|
|
595
|
+
// Take one slot against this node's overall `max` AND every ancestor's, used by a child
|
|
596
|
+
// to acquire global capacity. Self is checked first (cheap, no side effect) then the
|
|
597
|
+
// parent chain; self is only incremented once the whole chain grants, so a denial higher
|
|
598
|
+
// up never needs a rollback. Returns false if any level is at its cap.
|
|
599
|
+
#tryAcquireGlobal() {
|
|
600
|
+
if (this.dead) {
|
|
601
|
+
return false;
|
|
602
|
+
}
|
|
603
|
+
if (this.shared) {
|
|
604
|
+
if (this.stateView[RUNNING_INDEX] >= this.#max) {
|
|
605
|
+
return false;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
else if (this.running >= this.#max) {
|
|
609
|
+
return false;
|
|
610
|
+
}
|
|
611
|
+
if (this.#parent !== null && !this.#parent.#tryAcquireGlobal()) {
|
|
612
|
+
return false;
|
|
613
|
+
}
|
|
614
|
+
if (this.shared) {
|
|
615
|
+
Atomics.add(this.stateView, RUNNING_INDEX, 1);
|
|
616
|
+
}
|
|
617
|
+
this.running += 1;
|
|
618
|
+
return true;
|
|
619
|
+
}
|
|
620
|
+
// Mirror of #tryAcquireGlobal's increments: release one slot at this node and every
|
|
621
|
+
// ancestor, waking parked waiters on each shared level.
|
|
622
|
+
#releaseGlobal() {
|
|
623
|
+
// Stop at a dead ancestor (mirrors #tryAcquireGlobal's dead guard and release()'s). At
|
|
624
|
+
// process exit only the shared ROOT runs [kOnExit] — a local child is not in the global
|
|
625
|
+
// `schedulers` set, so its dead flag is never set and a late post-exit microtask from an
|
|
626
|
+
// in-flight child task can still reach here. kOnExit already subtracted this node's held
|
|
627
|
+
// slots from the SAB; decrementing again would double-count and drive the cross-thread
|
|
628
|
+
// RUNNING counter negative. (Ancestors above a dead node were balanced by the same
|
|
629
|
+
// kOnExit, so stopping the whole walk here is correct.)
|
|
630
|
+
if (this.dead) {
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
633
|
+
this.running -= 1;
|
|
634
|
+
if (this.shared) {
|
|
635
|
+
Atomics.sub(this.stateView, RUNNING_INDEX, 1);
|
|
636
|
+
if (this.stateView[WAITERS_INDEX] > 0) {
|
|
637
|
+
Atomics.notify(this.stateView, RUNNING_INDEX, 1);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
if (this.#parent !== null) {
|
|
641
|
+
this.#parent.#releaseGlobal();
|
|
642
|
+
}
|
|
643
|
+
}
|
|
460
644
|
#schedule(running) {
|
|
461
645
|
const shared = this.shared;
|
|
462
646
|
if (this.dead || this.pending === 0 || this.releasing) {
|
|
@@ -536,6 +720,220 @@ export class Scheduler extends Queue {
|
|
|
536
720
|
this.releasing = false;
|
|
537
721
|
}
|
|
538
722
|
}
|
|
723
|
+
// ---- hierarchy dispatch (child() schedulers) ----
|
|
724
|
+
// True if this node or any descendant has queued work.
|
|
725
|
+
#subtreeHasPending() {
|
|
726
|
+
if (this.pending > 0) {
|
|
727
|
+
return true;
|
|
728
|
+
}
|
|
729
|
+
const children = this.#children;
|
|
730
|
+
if (children !== null) {
|
|
731
|
+
for (let i = 0; i < children.length; i++) {
|
|
732
|
+
if (children[i].#subtreeHasPending()) {
|
|
733
|
+
return true;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
return false;
|
|
738
|
+
}
|
|
739
|
+
// Dispatch this node's OWN queued tasks, each gated by its local per-priority cap (with
|
|
740
|
+
// the starvation lottery) AND a global slot from the parent chain. Returns true if at
|
|
741
|
+
// least one task was dispatched.
|
|
742
|
+
#drainSelf() {
|
|
743
|
+
if (this.dead || this.pending === 0) {
|
|
744
|
+
return false;
|
|
745
|
+
}
|
|
746
|
+
const isRoot = this.#parent === null;
|
|
747
|
+
let progressed = false;
|
|
748
|
+
while (this.pending > 0) {
|
|
749
|
+
// Hard cap on THIS node's whole-subtree concurrency, checked BEFORE getNextQueue
|
|
750
|
+
// exactly like #schedule: the GLOBAL running total for the root, this node's
|
|
751
|
+
// `running` (own + descendants) for a child. getNextQueue's starvation lottery
|
|
752
|
+
// deliberately BYPASSES the per-priority limits, so without this gate the lottery
|
|
753
|
+
// could push a node past its own `max`.
|
|
754
|
+
const maxRunning = isRoot && this.shared ? this.stateView[RUNNING_INDEX] : this.running;
|
|
755
|
+
if (maxRunning >= this.#max) {
|
|
756
|
+
break;
|
|
757
|
+
}
|
|
758
|
+
// Per-priority selection is measured against the GLOBAL total for the root (its caps
|
|
759
|
+
// are global reservations) but against this child's OWN direct count (#directRunning)
|
|
760
|
+
// for a child — so a child's per-priority caps are not polluted by descendant slots.
|
|
761
|
+
const capRunning = isRoot ? maxRunning : this.#directRunning;
|
|
762
|
+
const queue = this.getNextQueue(this.#limits, capRunning);
|
|
763
|
+
if (queue === null) {
|
|
764
|
+
break;
|
|
765
|
+
}
|
|
766
|
+
// Acquire a global slot. For the root this is its own counter; for a child it is the
|
|
767
|
+
// whole parent chain (#tryAcquireGlobal), which can still deny on a parent's cap.
|
|
768
|
+
if (isRoot) {
|
|
769
|
+
if (this.shared) {
|
|
770
|
+
Atomics.add(this.stateView, RUNNING_INDEX, 1);
|
|
771
|
+
}
|
|
772
|
+
this.running += 1;
|
|
773
|
+
}
|
|
774
|
+
else {
|
|
775
|
+
if (!this.#parent.#tryAcquireGlobal()) {
|
|
776
|
+
break;
|
|
777
|
+
}
|
|
778
|
+
this.#directRunning += 1;
|
|
779
|
+
this.running += 1;
|
|
780
|
+
}
|
|
781
|
+
const fn = queue.arr[queue.idx];
|
|
782
|
+
queue.arr[queue.idx++] = null;
|
|
783
|
+
const opaque = queue.arr[queue.idx];
|
|
784
|
+
queue.arr[queue.idx++] = null;
|
|
785
|
+
queue.cnt -= 1;
|
|
786
|
+
if (queue.cnt === 0) {
|
|
787
|
+
this.nonEmptyMask &= ~(1 << queue.i);
|
|
788
|
+
queue.idx = 0;
|
|
789
|
+
queue.arr = [];
|
|
790
|
+
}
|
|
791
|
+
else if (queue.idx > 1024) {
|
|
792
|
+
queue.arr.splice(0, queue.idx);
|
|
793
|
+
queue.idx = 0;
|
|
794
|
+
}
|
|
795
|
+
this.pending -= 1;
|
|
796
|
+
progressed = true;
|
|
797
|
+
try {
|
|
798
|
+
fn(opaque);
|
|
799
|
+
}
|
|
800
|
+
catch (err) {
|
|
801
|
+
// Balance the slot we just took (release() routes through the hierarchy path;
|
|
802
|
+
// #driving keeps the nested drive from re-entering), then isolate the failure.
|
|
803
|
+
this.release();
|
|
804
|
+
queueMicrotask(() => {
|
|
805
|
+
throw err;
|
|
806
|
+
});
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
return progressed;
|
|
810
|
+
}
|
|
811
|
+
// Dispatch this node and, round-robin, every descendant. Returns true if any task ran in
|
|
812
|
+
// the subtree. The cursor rotation gives siblings a fair share of freed global capacity
|
|
813
|
+
// when the pool is over-subscribed (no sibling drains fully first every pass).
|
|
814
|
+
#dispatchSubtree() {
|
|
815
|
+
if (this.dead) {
|
|
816
|
+
return false;
|
|
817
|
+
}
|
|
818
|
+
let progressed = this.#drainSelf();
|
|
819
|
+
const children = this.#children;
|
|
820
|
+
if (children !== null && children.length > 0) {
|
|
821
|
+
// A dispatched fn may synchronously dispose a sibling, which splices #children
|
|
822
|
+
// mid-iteration. Bound the loop by the count captured here and null-check each slot
|
|
823
|
+
// (the index can fall past a shrunk array) so a concurrent removal can't crash the
|
|
824
|
+
// drive or read undefined. A disposed child is dead, so its #dispatchSubtree no-ops.
|
|
825
|
+
const start = this.#driveCursor;
|
|
826
|
+
const n = children.length;
|
|
827
|
+
for (let k = 0; k < n; k++) {
|
|
828
|
+
const len = children.length;
|
|
829
|
+
if (len === 0) {
|
|
830
|
+
break;
|
|
831
|
+
}
|
|
832
|
+
const node = children[(start + k) % len];
|
|
833
|
+
if (node !== undefined && node.#dispatchSubtree()) {
|
|
834
|
+
progressed = true;
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
const len = children.length;
|
|
838
|
+
this.#driveCursor = len > 0 ? (start + 1) % len : 0;
|
|
839
|
+
}
|
|
840
|
+
return progressed;
|
|
841
|
+
}
|
|
842
|
+
// Root-coordinated dispatch for child() hierarchies. Replaces #schedule/#maybeWait for
|
|
843
|
+
// any scheduler that is part of a tree. Re-entrancy is guarded by #driving (a synchronous
|
|
844
|
+
// release inside a dispatched fn just decrements counters; the outer loop re-reads them
|
|
845
|
+
// and picks up the freed capacity).
|
|
846
|
+
#driveLoop() {
|
|
847
|
+
if (this.dead || this.#driving) {
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
this.#driving = true;
|
|
851
|
+
try {
|
|
852
|
+
for (;;) {
|
|
853
|
+
const expected = this.shared ? this.stateView[RUNNING_INDEX] : 0;
|
|
854
|
+
if (this.#dispatchSubtree()) {
|
|
855
|
+
continue; // dispatched something — re-attempt (freed/created capacity may allow more)
|
|
856
|
+
}
|
|
857
|
+
// Nothing dispatched this pass.
|
|
858
|
+
if (!this.shared || this.#waitPromise !== null || this.#max === 0) {
|
|
859
|
+
// Non-shared: local releases redrive #driveLoop directly, no futex to park on.
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
if (!this.#subtreeHasPending()) {
|
|
863
|
+
break;
|
|
864
|
+
}
|
|
865
|
+
const running = this.stateView[RUNNING_INDEX];
|
|
866
|
+
if (running !== expected) {
|
|
867
|
+
continue; // a concurrent release changed capacity — re-attempt before parking
|
|
868
|
+
}
|
|
869
|
+
if (running < this.#max) {
|
|
870
|
+
// GLOBAL headroom exists yet we dispatched nothing. Two cases:
|
|
871
|
+
if (this.running > 0) {
|
|
872
|
+
// This worker holds running tasks → it is blocked on a LOCAL child cap, which
|
|
873
|
+
// only a local release can free (and that redrives #driveLoop directly). The
|
|
874
|
+
// headroom is shared, though: a peer whose child is below its cap could use it,
|
|
875
|
+
// and notify(1) on the releasing side may have woken THIS worker (which can't
|
|
876
|
+
// use the slot). Forward the wakeup so the slot is not stranded while a peer's
|
|
877
|
+
// backlog hangs; the chain stops when capacity is consumed or no waiter remains.
|
|
878
|
+
if (this.stateView[WAITERS_INDEX] > 0) {
|
|
879
|
+
Atomics.notify(this.stateView, RUNNING_INDEX, 1);
|
|
880
|
+
}
|
|
881
|
+
break;
|
|
882
|
+
}
|
|
883
|
+
// We hold NOTHING yet headroom exists: a peer won the acquire race during this
|
|
884
|
+
// pass (RUNNING transiently hit max while we read it in #tryAcquireGlobal). There
|
|
885
|
+
// is no local task to ever redrive us, so we must NOT break — retry; the next
|
|
886
|
+
// #tryAcquireGlobal grabs the slot once the transient spike clears. (Parking here
|
|
887
|
+
// would strand us with idle capacity, since the freeing release already fired.)
|
|
888
|
+
continue;
|
|
889
|
+
}
|
|
890
|
+
// Globally saturated with pending work: park on RUNNING. Bump WAITERS, then re-read
|
|
891
|
+
// RUNNING (a release in the window skipped notify while WAITERS was 0); waitAsync's
|
|
892
|
+
// atomic compare against `expected` covers the remaining window up to the park.
|
|
893
|
+
Atomics.add(this.stateView, WAITERS_INDEX, 1);
|
|
894
|
+
if (this.stateView[RUNNING_INDEX] !== expected) {
|
|
895
|
+
Atomics.sub(this.stateView, WAITERS_INDEX, 1);
|
|
896
|
+
continue;
|
|
897
|
+
}
|
|
898
|
+
const { value, async } = Atomics.waitAsync(this.stateView, RUNNING_INDEX, expected);
|
|
899
|
+
this.#waitPromise = (async ? value : Promise.resolve(value)).then(() => {
|
|
900
|
+
if (this.dead) {
|
|
901
|
+
Atomics.notify(this.stateView, RUNNING_INDEX, 1);
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
Atomics.sub(this.stateView, WAITERS_INDEX, 1);
|
|
905
|
+
this.#waitPromise = null;
|
|
906
|
+
this.#driveLoop();
|
|
907
|
+
});
|
|
908
|
+
break;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
finally {
|
|
912
|
+
this.#driving = false;
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
// Release path for any scheduler in a child() hierarchy: free one slot up the chain, then
|
|
916
|
+
// re-drive the whole tree from the root.
|
|
917
|
+
#releaseHierarchy() {
|
|
918
|
+
if (this.running > 0) {
|
|
919
|
+
this.running -= 1;
|
|
920
|
+
if (this.#parent !== null) {
|
|
921
|
+
// This release is for one of THIS node's own direct tasks (release() is always
|
|
922
|
+
// called on the node the task ran through), so pair the #directRunning increment.
|
|
923
|
+
if (this.#directRunning > 0) {
|
|
924
|
+
this.#directRunning -= 1;
|
|
925
|
+
}
|
|
926
|
+
this.#parent.#releaseGlobal();
|
|
927
|
+
}
|
|
928
|
+
else if (this.shared) {
|
|
929
|
+
Atomics.sub(this.stateView, RUNNING_INDEX, 1);
|
|
930
|
+
if (this.stateView[WAITERS_INDEX] > 0) {
|
|
931
|
+
Atomics.notify(this.stateView, RUNNING_INDEX, 1);
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
this.#root().#driveLoop();
|
|
936
|
+
}
|
|
539
937
|
release = () => {
|
|
540
938
|
// After [kOnExit], all bookkeeping for this scheduler has been finalised
|
|
541
939
|
// and any leftover microtasks must NOT touch shared state. See the dead
|
|
@@ -543,6 +941,10 @@ export class Scheduler extends Queue {
|
|
|
543
941
|
if (this.dead) {
|
|
544
942
|
return;
|
|
545
943
|
}
|
|
944
|
+
if (this.#parent !== null || this.#children !== null) {
|
|
945
|
+
this.#releaseHierarchy();
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
546
948
|
let running;
|
|
547
949
|
if (this.running > 0) {
|
|
548
950
|
this.running -= 1;
|
|
@@ -580,9 +982,36 @@ export class Scheduler extends Queue {
|
|
|
580
982
|
if (this.dead) {
|
|
581
983
|
return;
|
|
582
984
|
}
|
|
583
|
-
//
|
|
584
|
-
//
|
|
585
|
-
//
|
|
985
|
+
// Dispose descendants first: reject their queued run() promises and release the global
|
|
986
|
+
// slots they hold back up to us (so our own kOnExit below accounts only for OUR direct
|
|
987
|
+
// slots, not theirs — avoiding a double release of the same SAB slot).
|
|
988
|
+
const children = this.#children;
|
|
989
|
+
if (children !== null) {
|
|
990
|
+
this.#children = null;
|
|
991
|
+
for (const c of children.slice()) {
|
|
992
|
+
c[Symbol.dispose]();
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
// If we are a child, hand the slots we still hold back up the chain and unregister from
|
|
996
|
+
// the parent so the freed capacity can be reused and we can be GC'd.
|
|
997
|
+
const parent = this.#parent;
|
|
998
|
+
if (parent !== null) {
|
|
999
|
+
const held = this.running;
|
|
1000
|
+
this.running = 0;
|
|
1001
|
+
this.#directRunning = 0;
|
|
1002
|
+
for (let i = 0; i < held; i++) {
|
|
1003
|
+
parent.#releaseGlobal();
|
|
1004
|
+
}
|
|
1005
|
+
if (parent.#children !== null) {
|
|
1006
|
+
const idx = parent.#children.indexOf(this);
|
|
1007
|
+
if (idx >= 0) {
|
|
1008
|
+
parent.#children.splice(idx, 1);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
// Reuse the exit-cleanup path: release any global slots THIS instance still holds (root
|
|
1013
|
+
// shared mode), pair the WAITERS increment of a parked waitAsync, and mark the instance
|
|
1014
|
+
// dead so any late notify .then microtask becomes a no-op (see the `dead` docstring).
|
|
586
1015
|
this[kOnExit]();
|
|
587
1016
|
// Reject queued run() promises so callers awaiting them fail fast instead of
|
|
588
1017
|
// hanging forever — the dead-guard in run() only covers calls made AFTER dispose,
|
|
@@ -606,6 +1035,16 @@ export class Scheduler extends Queue {
|
|
|
606
1035
|
// there is nothing left for process.on('exit') to do for this instance.
|
|
607
1036
|
this.#waitPromise = null;
|
|
608
1037
|
schedulers.delete(this);
|
|
1038
|
+
// A freed child slot may let the parent or our siblings dispatch now — BUT only when
|
|
1039
|
+
// this is an isolated child dispose, not when the parent is disposing the whole tree.
|
|
1040
|
+
// A parent's dispose nulls its #children before disposing each descendant; re-driving it
|
|
1041
|
+
// then would dispatch the parent's OWN still-queued direct tasks mid-disposal (running
|
|
1042
|
+
// user callbacks that the parent is about to reject), violating dispose's contract. A
|
|
1043
|
+
// node that has a child always has a non-null #children EXCEPT during its own dispose,
|
|
1044
|
+
// so `parent.#children !== null` is exactly "parent still an active hierarchy node".
|
|
1045
|
+
if (parent !== null && parent.#children !== null) {
|
|
1046
|
+
parent.#root().#driveLoop();
|
|
1047
|
+
}
|
|
609
1048
|
}
|
|
610
1049
|
}
|
|
611
1050
|
//# 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.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
"test:types": "tsd"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@types/node": "^25.
|
|
30
|
-
"oxlint-tsgolint": "^0.
|
|
29
|
+
"@types/node": "^25.9.4",
|
|
30
|
+
"oxlint-tsgolint": "^0.23.0",
|
|
31
31
|
"rimraf": "^6.1.3",
|
|
32
32
|
"tsd": "^0.33.0",
|
|
33
33
|
"typescript": "^5.9.3"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "75e92c1b7b868c0996f7082211ad6c4909de4355"
|
|
36
36
|
}
|