@zukhruf/pool 0.6.13 → 0.6.15
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 +58 -7
- package/dist/capacity.d.ts +9 -1
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +4 -5
- package/dist/capacity.js.map +1 -1
- package/dist/climbing.d.ts +4 -4
- package/dist/climbing.d.ts.map +1 -1
- package/dist/climbing.js +103 -23
- package/dist/climbing.js.map +1 -1
- package/dist/eviction.d.ts +2 -1
- package/dist/eviction.d.ts.map +1 -1
- package/dist/gradient.d.ts +2 -1
- package/dist/gradient.d.ts.map +1 -1
- package/dist/gradient.js +15 -7
- package/dist/gradient.js.map +1 -1
- package/dist/idle-timeout.d.ts +2 -1
- package/dist/idle-timeout.d.ts.map +1 -1
- package/dist/idle-timeout.js +6 -8
- package/dist/idle-timeout.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/pool.d.ts +3 -0
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +18 -12
- package/dist/pool.js.map +1 -1
- package/dist/resources.d.ts +2 -3
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +3 -3
- package/dist/resources.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ await using pool = new Pool({
|
|
|
13
13
|
size: new Fixed(2),
|
|
14
14
|
startup: new Parallel(),
|
|
15
15
|
eviction: new IdleTimeout({ after: 300_000 }),
|
|
16
|
+
clock: globalThis,
|
|
16
17
|
create: () => new VisionWorker('/path/to/vision-worker'),
|
|
17
18
|
});
|
|
18
19
|
const text = await pool.use((worker) => worker.read('/tmp/receipt.png'));
|
|
@@ -37,14 +38,48 @@ The pool waits for `ready()` with no time limit. Thus, if the warm-up of a worke
|
|
|
37
38
|
|
|
38
39
|
## Choose how many workers run
|
|
39
40
|
|
|
40
|
-
| Sizing
|
|
41
|
-
|
|
|
42
|
-
| `Fixed(n)`
|
|
43
|
-
| `Resources({ memoryPerWorker })` | one for each CPU, while each finds its memory free
|
|
44
|
-
| `HillClimbing({ memoryPerWorker })` | two first,
|
|
45
|
-
| `Gradient({ memoryPerWorker })` | two first,
|
|
41
|
+
| Sizing | Runs |
|
|
42
|
+
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
43
|
+
| `Fixed(n)` | n workers |
|
|
44
|
+
| `Resources({ memoryPerWorker, computer })` | one for each CPU, while each finds its memory free |
|
|
45
|
+
| `HillClimbing({ memoryPerWorker, computer })` | two first, then as many as add at least a tenth more jobs a second each (as the .NET thread pool) |
|
|
46
|
+
| `Gradient({ memoryPerWorker, computer })` | two first, then as many as keep a job at most half again the time it takes with two (as Netflix concurrency-limits) |
|
|
46
47
|
|
|
47
|
-
The two sizings that learn
|
|
48
|
+
The two sizings that learn take steps for as long as the pool runs. A step measures three windows of at least 20 jobs and 2 seconds: at the size it has, at the size it tries, and at the size it has again. A sizing measures only while jobs wait and every worker is ready.
|
|
49
|
+
|
|
50
|
+
- A step tries one more worker, or fewer: `HillClimbing` one fewer, `Gradient` two. A step with fewer keeps every worker alive, so it costs no warm-up.
|
|
51
|
+
- The sizing keeps one more worker as soon as one step shows that it pays. It lets a worker go only after two steps in a row show that the worker does not pay.
|
|
52
|
+
- After a step that changes nothing, the sizing pauses: one window first, then twice as long after each such step, up to 16 windows. The length is random, so pools in other processes do not step at the same moments.
|
|
53
|
+
- After each window, the sizing reads the free memory again. When its workers do not fit, it runs fewer at once. It never runs more than the capacity when the pool was built.
|
|
54
|
+
|
|
55
|
+
See [ADR 0002](./docs/adr/0002-a-sizing-that-learns-compares-one-more-worker-between-two-windows.md) and [ADR 0007](./docs/adr/0007-a-sizing-that-learns-keeps-learning-in-steps-both-ways-and-pauses-between-steps-that-change-nothing.md).
|
|
56
|
+
|
|
57
|
+
## Give the sizing the computer
|
|
58
|
+
|
|
59
|
+
`Resources`, `HillClimbing` and `Gradient` find the capacity: the most workers the computer can give. They read the CPU count and the free memory from the `computer` that you give. A sizing that learns reads the free memory again after each window. Give the two functions of Node in production:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
import { availableParallelism } from 'node:os';
|
|
63
|
+
|
|
64
|
+
import { HillClimbing } from '@zukhruf/pool';
|
|
65
|
+
|
|
66
|
+
const { availableMemory } = process;
|
|
67
|
+
const size = new HillClimbing({
|
|
68
|
+
memoryPerWorker: 2 * 1024 ** 3,
|
|
69
|
+
computer: { availableParallelism, availableMemory },
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
A test gives a plain object, and changes what it returns to show other processes that take the memory:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
let free = 8 * 1024 ** 3;
|
|
77
|
+
const computer = { availableParallelism: () => 4, availableMemory: () => free };
|
|
78
|
+
// ...
|
|
79
|
+
free = 2.5 * 1024 ** 3;
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
A host that runs several pools on one computer can give each pool a part of the memory, for example `availableMemory: () => process.availableMemory() / 2`. See [ADR 0009](./docs/adr/0009-a-sizing-reads-the-capacity-from-the-computer-that-the-caller-gives.md).
|
|
48
83
|
|
|
49
84
|
## Choose when idle workers close
|
|
50
85
|
|
|
@@ -81,6 +116,19 @@ A worker that exited is in no count, and a slot whose worker the pool evicted is
|
|
|
81
116
|
|
|
82
117
|
A job that needs the slot of an exited worker starts a new worker. An eager startup also replaces an idle worker that exits. After an early exit (a worker that ran less than 10 minutes), the pool waits first: 1 s, then 2 s, 4 s, and so on up to 60 s for each early exit in a row. A worker that runs 10 minutes ends this back-off. A job does not wait for a back-off: its worker starts now. Kubernetes restarts a container in CrashLoopBackOff with the same rule. The pool does not count an evicted worker as an exit: it does not replace the worker and does not start a back-off. An evicted worker that ran 10 minutes ends the back-off too. See [ADR 0005](./docs/adr/0005-an-eager-pool-backs-off-before-it-replaces-a-worker-that-exited-early.md).
|
|
83
118
|
|
|
119
|
+
## Run the pool on a clock
|
|
120
|
+
|
|
121
|
+
The pool measures the time of each job, waits before it replaces a worker that exited early, and gives the eviction the clock for its waits. All of these run on the `clock` that you give. Give `globalThis` in production. A test gives `createClock()` of `@sinonjs/fake-timers` and moves it with `await clock.tickAsync(ms)`, so a back-off of 60 seconds or a sizing window of 2 seconds takes no real time ([`@zukhruf/async`](../async/README.md#run-a-wait-on-a-clock)).
|
|
122
|
+
|
|
123
|
+
An eviction of your own gets the clock of the pool as the third argument of `idle(busy, evict, clock)`, so the pool and its eviction always run on one clock. See [ADR 0008](./docs/adr/0008-the-pool-measures-and-waits-on-the-clock-that-the-caller-gives.md).
|
|
124
|
+
|
|
125
|
+
## Recipes
|
|
126
|
+
|
|
127
|
+
1. [Let the pool find how many workers pay](./docs/recipes/find-how-many-workers-pay.md)
|
|
128
|
+
2. [Warm a model once, then start the other workers](./docs/recipes/warm-a-model-once.md)
|
|
129
|
+
3. [Hold workers only while there is work](./docs/recipes/hold-workers-only-while-there-is-work.md)
|
|
130
|
+
4. [Test a pool on the real path](./docs/recipes/test-a-pool-on-the-real-path.md)
|
|
131
|
+
|
|
84
132
|
## Decisions
|
|
85
133
|
|
|
86
134
|
- [ADR 0001](./docs/adr/0001-startups-and-sizings-are-classes-that-a-caller-chooses.md): startups and sizings are classes that a caller chooses.
|
|
@@ -89,3 +137,6 @@ A job that needs the slot of an exited worker starts a new worker. An eager star
|
|
|
89
137
|
- [ADR 0004](./docs/adr/0004-a-pool-reports-its-stats-as-one-snapshot-of-counts.md): a pool reports its stats as one snapshot of counts.
|
|
90
138
|
- [ADR 0005](./docs/adr/0005-an-eager-pool-backs-off-before-it-replaces-a-worker-that-exited-early.md): an eager pool backs off before it replaces a worker that exited early.
|
|
91
139
|
- [ADR 0006](./docs/adr/0006-the-pool-evicts-an-idle-worker-that-its-eviction-lets-go-and-lends-an-idle-worker-first.md): the pool evicts an idle worker that its eviction lets go, and lends an idle worker first.
|
|
140
|
+
- [ADR 0007](./docs/adr/0007-a-sizing-that-learns-keeps-learning-in-steps-both-ways-and-pauses-between-steps-that-change-nothing.md): a sizing that learns keeps learning in steps both ways, and pauses between steps that change nothing.
|
|
141
|
+
- [ADR 0008](./docs/adr/0008-the-pool-measures-and-waits-on-the-clock-that-the-caller-gives.md): the pool measures and waits on the clock that the caller gives.
|
|
142
|
+
- [ADR 0009](./docs/adr/0009-a-sizing-reads-the-capacity-from-the-computer-that-the-caller-gives.md): a sizing reads the capacity from the computer that the caller gives.
|
package/dist/capacity.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface Computer {
|
|
2
|
+
availableParallelism(): number;
|
|
3
|
+
availableMemory(): number;
|
|
4
|
+
}
|
|
5
|
+
export interface CapacityOptions {
|
|
6
|
+
readonly memoryPerWorker: number;
|
|
7
|
+
readonly computer: Computer;
|
|
8
|
+
}
|
|
9
|
+
export declare function capacity({ memoryPerWorker, computer, }: CapacityOptions): number;
|
|
2
10
|
//# sourceMappingURL=capacity.d.ts.map
|
package/dist/capacity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,oBAAoB,IAAI,MAAM,CAAC;IAC/B,eAAe,IAAI,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAID,wBAAgB,QAAQ,CAAC,EACvB,eAAe,EACf,QAAQ,GACT,EAAE,eAAe,GAAG,MAAM,CAQ1B"}
|
package/dist/capacity.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return Math.max(1, Math.min(availableParallelism(), Math.floor(process.availableMemory() / memoryPerWorker)));
|
|
1
|
+
// The workers the computer affords: one per CPU, as long as each still finds
|
|
2
|
+
// its memory free.
|
|
3
|
+
export function capacity({ memoryPerWorker, computer, }) {
|
|
4
|
+
return Math.max(1, Math.min(computer.availableParallelism(), Math.floor(computer.availableMemory() / memoryPerWorker)));
|
|
6
5
|
}
|
|
7
6
|
//# sourceMappingURL=capacity.js.map
|
package/dist/capacity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacity.js","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"capacity.js","sourceRoot":"","sources":["../src/capacity.ts"],"names":[],"mappings":"AAaA,6EAA6E;AAC7E,mBAAmB;AACnB,MAAM,UAAU,QAAQ,CAAC,EACvB,eAAe,EACf,QAAQ,GACQ;IAChB,OAAO,IAAI,CAAC,GAAG,CACb,CAAC,EACD,IAAI,CAAC,GAAG,CACN,QAAQ,CAAC,oBAAoB,EAAE,EAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,eAAe,CAAC,CACzD,CACF,CAAC;AACJ,CAAC"}
|
package/dist/climbing.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type CapacityOptions } from './capacity.ts';
|
|
1
2
|
import type { Sample, Sizing } from './sizing.ts';
|
|
2
3
|
export interface Window {
|
|
3
4
|
readonly jobs: number;
|
|
@@ -7,13 +8,12 @@ export interface Window {
|
|
|
7
8
|
export declare abstract class Climbing implements Sizing {
|
|
8
9
|
#private;
|
|
9
10
|
readonly ceiling: number;
|
|
10
|
-
constructor(options:
|
|
11
|
-
memoryPerWorker: number;
|
|
12
|
-
});
|
|
11
|
+
constructor(options: CapacityOptions);
|
|
13
12
|
get current(): number;
|
|
14
13
|
get kept(): number;
|
|
15
14
|
record({ started, finished, measurable }: Sample): void;
|
|
16
15
|
protected abstract measure(window: Window): number;
|
|
17
|
-
protected abstract pays(ratio: number): boolean;
|
|
16
|
+
protected abstract pays(ratio: number, larger: number, smaller: number): boolean;
|
|
17
|
+
protected fewer(size: number): number;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=climbing.d.ts.map
|
package/dist/climbing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"climbing.d.ts","sourceRoot":"","sources":["../src/climbing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"climbing.d.ts","sourceRoot":"","sources":["../src/climbing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAalD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAkBD,8BAAsB,QAAS,YAAW,MAAM;;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAkBb,OAAO,EAAE,eAAe;IAQpC,IAAI,OAAO,IAAI,MAAM,CAGpB;IAID,IAAI,IAAI,IAAI,MAAM,CAKjB;IAED,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,GAAG,IAAI;IAgFvD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIlD,SAAS,CAAC,QAAQ,CAAC,IAAI,CACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO;IAGV,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGtC"}
|
package/dist/climbing.js
CHANGED
|
@@ -3,41 +3,71 @@ import { capacity } from "./capacity.js";
|
|
|
3
3
|
// decide alone.
|
|
4
4
|
const jobs = 20;
|
|
5
5
|
const span = 2_000;
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
// measures
|
|
6
|
+
// A pause between two steps that changed nothing doubles from one window up
|
|
7
|
+
// to this many, as .NET's hill climbing waits up to ten times longer when
|
|
8
|
+
// more threads hurt: each step with one more warms up a worker for nothing.
|
|
9
|
+
const longestPause = 16;
|
|
10
|
+
// Finds how many workers pay by trying more or fewer, step after step, for as
|
|
11
|
+
// long as the pool runs. Work that changes while it is measured, as when files
|
|
12
|
+
// arrive grouped by kind, would decide a plain before and after, so each step
|
|
13
|
+
// measures in the order A, B, A: a window at the size that pays so far, one at
|
|
14
|
+
// the size it tries, and one back at the first size. The larger of the two
|
|
15
|
+
// sizes pays when its window compared to the other passes the variant's test.
|
|
16
|
+
// One more worker that pays is kept at once; the pool lets its last worker go
|
|
17
|
+
// only after that worker failed to pay in two steps in a row, because a worker
|
|
18
|
+
// that closes too early must warm up again. A step with fewer workers keeps
|
|
19
|
+
// every worker alive. A step that changes the size leads to another step in
|
|
20
|
+
// the same direction at once; any other step turns around after a pause. The
|
|
21
|
+
// pause has a random length, so pools in other processes do not measure each
|
|
22
|
+
// other's steps (.NET; AWS's exponential backoff and jitter). Pools start with
|
|
23
|
+
// two workers and never pass what the computer affords, which they read again after
|
|
24
|
+
// each window. Variants say what a window measures, what passes, and how many
|
|
25
|
+
// workers a step with fewer tries.
|
|
14
26
|
export class Climbing {
|
|
15
27
|
ceiling;
|
|
28
|
+
#capacity;
|
|
29
|
+
// The workers the computer affords now; other processes take and free memory.
|
|
30
|
+
#room;
|
|
16
31
|
#size;
|
|
32
|
+
#direction = 'more';
|
|
17
33
|
#step;
|
|
34
|
+
// Steps in a row in which fewer workers did as well.
|
|
35
|
+
#unpaid = 0;
|
|
36
|
+
// Steps in a row that changed nothing, and when the pause after them ends.
|
|
37
|
+
#calm = 0;
|
|
38
|
+
#resume = 0;
|
|
18
39
|
#before = 0;
|
|
19
|
-
#
|
|
40
|
+
#tried = 0;
|
|
20
41
|
#first = 0;
|
|
21
42
|
#count = 0;
|
|
22
43
|
#busy = 0;
|
|
23
44
|
constructor(options) {
|
|
24
|
-
this
|
|
45
|
+
this.#capacity = options;
|
|
46
|
+
this.ceiling = capacity(options);
|
|
47
|
+
this.#room = this.ceiling;
|
|
25
48
|
this.#size = Math.min(2, this.ceiling);
|
|
26
|
-
this.#step = this
|
|
49
|
+
this.#step = this.ceiling > 1 ? 'before' : 'settled';
|
|
27
50
|
}
|
|
28
51
|
get current() {
|
|
29
|
-
|
|
52
|
+
if (this.#step !== 'tried')
|
|
53
|
+
return this.#size;
|
|
54
|
+
return this.#direction === 'more' ? this.#size + 1 : this.fewer(this.#size);
|
|
30
55
|
}
|
|
31
|
-
// The worker
|
|
32
|
-
// before it again.
|
|
56
|
+
// The worker a step tries stays alive while the step measures the size
|
|
57
|
+
// before it again, and a step with fewer workers keeps every worker.
|
|
33
58
|
get kept() {
|
|
34
|
-
return this.#
|
|
59
|
+
return this.#direction === 'more' &&
|
|
60
|
+
(this.#step === 'tried' || this.#step === 'after')
|
|
35
61
|
? this.#size + 1
|
|
36
62
|
: this.#size;
|
|
37
63
|
}
|
|
38
64
|
record({ started, finished, measurable }) {
|
|
39
65
|
if (this.#step === 'settled')
|
|
40
66
|
return;
|
|
67
|
+
if (this.#step === 'pause' && finished >= this.#resume) {
|
|
68
|
+
this.#step = 'before';
|
|
69
|
+
this.#restart();
|
|
70
|
+
}
|
|
41
71
|
if (!measurable) {
|
|
42
72
|
this.#restart();
|
|
43
73
|
return;
|
|
@@ -54,24 +84,74 @@ export class Climbing {
|
|
|
54
84
|
busy: this.#busy,
|
|
55
85
|
});
|
|
56
86
|
this.#restart();
|
|
87
|
+
this.#room = Math.min(this.ceiling, capacity(this.#capacity));
|
|
88
|
+
if (this.kept > this.#room) {
|
|
89
|
+
// Memory that other processes took does not wait for two steps.
|
|
90
|
+
this.#size = Math.min(this.#size, this.#room);
|
|
91
|
+
this.#unpaid = 0;
|
|
92
|
+
this.#direction = 'fewer';
|
|
93
|
+
this.#step = 'before';
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (this.#step === 'pause')
|
|
97
|
+
return;
|
|
57
98
|
if (this.#step === 'before') {
|
|
99
|
+
// With no step that fits, the sizing measures again.
|
|
100
|
+
if (!this.#aim())
|
|
101
|
+
return;
|
|
58
102
|
this.#before = value;
|
|
59
|
-
this.#step = '
|
|
103
|
+
this.#step = 'tried';
|
|
60
104
|
}
|
|
61
|
-
else if (this.#step === '
|
|
62
|
-
this.#
|
|
105
|
+
else if (this.#step === 'tried') {
|
|
106
|
+
this.#tried = value;
|
|
63
107
|
this.#step = 'after';
|
|
64
108
|
}
|
|
65
|
-
else if (this.pays(this.#more / ((this.#before + value) / 2))) {
|
|
66
|
-
this.#size++;
|
|
67
|
-
this.#step = this.#size < this.ceiling ? 'before' : 'settled';
|
|
68
|
-
}
|
|
69
109
|
else
|
|
70
|
-
this.#
|
|
110
|
+
this.#decide((this.#before + value) / 2, finished);
|
|
111
|
+
}
|
|
112
|
+
#decide(base, finished) {
|
|
113
|
+
const size = this.#size;
|
|
114
|
+
let changed = false;
|
|
115
|
+
if (this.#direction === 'more') {
|
|
116
|
+
changed = this.pays(this.#tried / base, size + 1, size);
|
|
117
|
+
if (changed)
|
|
118
|
+
this.#size++;
|
|
119
|
+
}
|
|
120
|
+
else if (this.pays(base / this.#tried, size, this.fewer(size)))
|
|
121
|
+
this.#unpaid = 0;
|
|
122
|
+
else if (++this.#unpaid === 2) {
|
|
123
|
+
this.#unpaid = 0;
|
|
124
|
+
this.#size--;
|
|
125
|
+
changed = true;
|
|
126
|
+
}
|
|
127
|
+
this.#step = 'before';
|
|
128
|
+
if (changed)
|
|
129
|
+
this.#calm = 0;
|
|
130
|
+
else if (this.#unpaid === 0) {
|
|
131
|
+
this.#direction = this.#direction === 'more' ? 'fewer' : 'more';
|
|
132
|
+
const windows = Math.min(2 ** this.#calm++, longestPause);
|
|
133
|
+
this.#resume = finished + span * windows * (0.5 + Math.random());
|
|
134
|
+
this.#step = 'pause';
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Turns the next step to a direction that fits, and tells whether one does.
|
|
138
|
+
#aim() {
|
|
139
|
+
const fewer = this.fewer(this.#size);
|
|
140
|
+
const more = this.#size < this.#room;
|
|
141
|
+
const less = fewer >= 1 && fewer < this.#size;
|
|
142
|
+
if (!more)
|
|
143
|
+
this.#direction = 'fewer';
|
|
144
|
+
if (!less)
|
|
145
|
+
this.#direction = 'more';
|
|
146
|
+
return more || less;
|
|
71
147
|
}
|
|
72
148
|
#restart() {
|
|
73
149
|
this.#count = 0;
|
|
74
150
|
this.#busy = 0;
|
|
75
151
|
}
|
|
152
|
+
// How many workers a step with fewer tries when `size` run.
|
|
153
|
+
fewer(size) {
|
|
154
|
+
return size - 1;
|
|
155
|
+
}
|
|
76
156
|
}
|
|
77
157
|
//# sourceMappingURL=climbing.js.map
|
package/dist/climbing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"climbing.js","sourceRoot":"","sources":["../src/climbing.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"climbing.js","sourceRoot":"","sources":["../src/climbing.ts"],"names":[],"mappings":"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"}
|
package/dist/eviction.d.ts
CHANGED
package/dist/eviction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eviction.d.ts","sourceRoot":"","sources":["../src/eviction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eviction.d.ts","sourceRoot":"","sources":["../src/eviction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAQ5C,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAChE"}
|
package/dist/gradient.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Climbing, type Window } from './climbing.ts';
|
|
|
2
2
|
export declare class Gradient extends Climbing {
|
|
3
3
|
#private;
|
|
4
4
|
protected measure({ jobs, busy }: Window): number;
|
|
5
|
-
protected pays(ratio: number): boolean;
|
|
5
|
+
protected pays(ratio: number, larger: number, smaller: number): boolean;
|
|
6
|
+
protected fewer(): number;
|
|
6
7
|
}
|
|
7
8
|
//# sourceMappingURL=gradient.d.ts.map
|
package/dist/gradient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAQtD,qBAAa,QAAS,SAAQ,QAAQ;;IAKpC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,GAAG,MAAM;IAIjD,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;cAQpD,KAAK,IAAI,MAAM;CAGnC"}
|
package/dist/gradient.js
CHANGED
|
@@ -2,17 +2,25 @@ import { Climbing } from "./climbing.js";
|
|
|
2
2
|
// Finds how many workers pay by the time a job takes, as Netflix's
|
|
3
3
|
// concurrency-limits Gradient does: one more worker pays while a job takes at
|
|
4
4
|
// most half again the time it took with two. Past that, the workers queue for
|
|
5
|
-
// something they share.
|
|
5
|
+
// something they share. Work changes, so a step with fewer runs two workers
|
|
6
|
+
// again, as Netflix's GradientLimit and Envoy measure their base time again
|
|
7
|
+
// at their least concurrency: the time with two is then as fresh as the step.
|
|
6
8
|
export class Gradient extends Climbing {
|
|
7
|
-
|
|
9
|
+
// For each size: a job's time with that many workers, divided by its time
|
|
10
|
+
// with two, as last measured.
|
|
11
|
+
#slowdown = new Map();
|
|
8
12
|
measure({ jobs, busy }) {
|
|
9
13
|
return busy / jobs;
|
|
10
14
|
}
|
|
11
|
-
pays(ratio) {
|
|
12
|
-
if (
|
|
13
|
-
return
|
|
14
|
-
this.#slowdown
|
|
15
|
-
|
|
15
|
+
pays(ratio, larger, smaller) {
|
|
16
|
+
if (larger <= 2)
|
|
17
|
+
return true;
|
|
18
|
+
const slowdown = (smaller <= 2 ? 1 : (this.#slowdown.get(smaller) ?? 1)) * ratio;
|
|
19
|
+
this.#slowdown.set(larger, slowdown);
|
|
20
|
+
return slowdown <= 1.5;
|
|
21
|
+
}
|
|
22
|
+
fewer() {
|
|
23
|
+
return 2;
|
|
16
24
|
}
|
|
17
25
|
}
|
|
18
26
|
//# sourceMappingURL=gradient.js.map
|
package/dist/gradient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gradient.js","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAe,MAAM,eAAe,CAAC;AAEtD,mEAAmE;AACnE,8EAA8E;AAC9E,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"gradient.js","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAe,MAAM,eAAe,CAAC;AAEtD,mEAAmE;AACnE,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACpC,0EAA0E;IAC1E,8BAA8B;IACrB,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAErC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAU;QACtC,OAAO,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAES,IAAI,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe;QAC3D,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,QAAQ,GACZ,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO,QAAQ,IAAI,GAAG,CAAC;IACzB,CAAC;IAEkB,KAAK;QACtB,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
|
package/dist/idle-timeout.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { type Clock } from '@zukhruf/async';
|
|
1
2
|
import type { Eviction } from './eviction.ts';
|
|
2
3
|
export declare class IdleTimeout implements Eviction {
|
|
3
4
|
#private;
|
|
4
5
|
constructor(options: {
|
|
5
6
|
after: number;
|
|
6
7
|
});
|
|
7
|
-
idle(busy: AbortSignal, evict: () => void): void;
|
|
8
|
+
idle(busy: AbortSignal, evict: () => void, clock: Clock): void;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=idle-timeout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-timeout.d.ts","sourceRoot":"","sources":["../src/idle-timeout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"idle-timeout.d.ts","sourceRoot":"","sources":["../src/idle-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAS9C,qBAAa,WAAY,YAAW,QAAQ;;gBAG9B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAYtC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAM/D"}
|
package/dist/idle-timeout.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { delay } from '@zukhruf/async';
|
|
2
2
|
// The longest delay a Node timer keeps: a longer one runs after 1 ms.
|
|
3
3
|
const longest = 2_147_483_647;
|
|
4
4
|
// Evicts a worker that stays idle for after milliseconds, as the .NET thread
|
|
@@ -14,13 +14,11 @@ export class IdleTimeout {
|
|
|
14
14
|
throw new RangeError(`An idle timeout is above 0 and at most ${longest} ms, not ${options.after}`);
|
|
15
15
|
this.#after = options.after;
|
|
16
16
|
}
|
|
17
|
-
idle(busy, evict) {
|
|
18
|
-
//
|
|
19
|
-
// disposed the pool while the worker became ready.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const timer = setTimeout(evict, this.#after);
|
|
23
|
-
addAbortListener(busy, () => clearTimeout(timer));
|
|
17
|
+
idle(busy, evict, clock) {
|
|
18
|
+
// An abort stops the timer, also an abort before the call, as when the
|
|
19
|
+
// owner disposed the pool while the worker became ready. The rejection of
|
|
20
|
+
// the wait is the abort.
|
|
21
|
+
delay(this.#after, { clock, signal: busy }).then(evict, () => { });
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
//# sourceMappingURL=idle-timeout.js.map
|
package/dist/idle-timeout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-timeout.js","sourceRoot":"","sources":["../src/idle-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"idle-timeout.js","sourceRoot":"","sources":["../src/idle-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAInD,sEAAsE;AACtE,MAAM,OAAO,GAAG,aAAa,CAAC;AAE9B,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,QAAQ;AACR,MAAM,OAAO,WAAW;IACb,MAAM,CAAS;IAExB,YAAY,OAA0B;QACpC,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/B,OAAO,CAAC,KAAK,IAAI,CAAC;YAClB,OAAO,CAAC,KAAK,GAAG,OAAO;YAEvB,MAAM,IAAI,UAAU,CAClB,0CAA0C,OAAO,YAAY,OAAO,CAAC,KAAK,EAAE,CAC7E,CAAC;QACJ,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,IAAiB,EAAE,KAAiB,EAAE,KAAY;QACrD,uEAAuE;QACvE,0EAA0E;QAC1E,yBAAyB;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpE,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export { Parallel } from './parallel.ts';
|
|
|
11
11
|
export { Pool } from './pool.ts';
|
|
12
12
|
export type { PoolStats } from './pool-stats.ts';
|
|
13
13
|
export { Resources } from './resources.ts';
|
|
14
|
+
export type { Computer } from './capacity.ts';
|
|
14
15
|
export type { Sample, Sizing } from './sizing.ts';
|
|
15
16
|
export type { Startup } from './startup.ts';
|
|
16
17
|
export type { Worker } from './worker.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/pool.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Clock } from '@zukhruf/async';
|
|
1
2
|
import type { Eviction } from './eviction.ts';
|
|
2
3
|
import type { PoolStats } from './pool-stats.ts';
|
|
3
4
|
import type { Sizing } from './sizing.ts';
|
|
@@ -10,6 +11,8 @@ export declare class Pool<T extends Worker> implements AsyncDisposable {
|
|
|
10
11
|
startup: Startup;
|
|
11
12
|
eviction: Eviction;
|
|
12
13
|
create: () => T;
|
|
14
|
+
/** The clock of every time that the pool measures and waits: `globalThis` in production, a fake clock in a test. */
|
|
15
|
+
clock: Clock;
|
|
13
16
|
});
|
|
14
17
|
ready(): Promise<void>;
|
|
15
18
|
get stats(): PoolStats;
|
package/dist/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAuB,MAAM,gBAAgB,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA2C1C,qBAAa,IAAI,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,eAAe;;gBAehD,OAAO,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,QAAQ,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,CAAC;QAChB,oHAAoH;QACpH,KAAK,EAAE,KAAK,CAAC;KACd;IAwBK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,IAAI,KAAK,IAAI,SAAS,CAarB;IAID,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IA8QlE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7C"}
|
package/dist/pool.js
CHANGED
|
@@ -23,9 +23,12 @@ export class Pool {
|
|
|
23
23
|
#workers = new Set();
|
|
24
24
|
#stopped = new AbortController();
|
|
25
25
|
#started = new Latch();
|
|
26
|
+
#clock;
|
|
26
27
|
// When the pool last changed how many workers it runs.
|
|
27
|
-
#resized
|
|
28
|
+
#resized;
|
|
28
29
|
constructor(options) {
|
|
30
|
+
this.#clock = options.clock;
|
|
31
|
+
this.#resized = this.#clock.performance.now();
|
|
29
32
|
this.#create = options.create;
|
|
30
33
|
this.#startup = options.startup;
|
|
31
34
|
this.#sizing = options.size;
|
|
@@ -90,7 +93,7 @@ export class Pool {
|
|
|
90
93
|
this.#lose(slot, worker);
|
|
91
94
|
};
|
|
92
95
|
stop.addEventListener('abort', kill, { once: true });
|
|
93
|
-
const started = performance.now();
|
|
96
|
+
const started = this.#clock.performance.now();
|
|
94
97
|
try {
|
|
95
98
|
const result = await job(worker);
|
|
96
99
|
stop.throwIfAborted();
|
|
@@ -144,7 +147,7 @@ export class Pool {
|
|
|
144
147
|
}
|
|
145
148
|
// A job does not wait out a back-off: its worker starts now.
|
|
146
149
|
if (state.kind === 'backoff')
|
|
147
|
-
clearTimeout(state.timer);
|
|
150
|
+
this.#clock.clearTimeout(state.timer);
|
|
148
151
|
const worker = await settled(state.kind === 'starting' ? state.outcome : this.#spawn(slot));
|
|
149
152
|
const now = slot.state;
|
|
150
153
|
if (now.kind === 'ready' && now.worker === worker)
|
|
@@ -159,7 +162,7 @@ export class Pool {
|
|
|
159
162
|
const steady = this.#steady();
|
|
160
163
|
this.#sizing.record({
|
|
161
164
|
started,
|
|
162
|
-
finished: performance.now(),
|
|
165
|
+
finished: this.#clock.performance.now(),
|
|
163
166
|
measurable: steady !== undefined && started >= steady && this.#queue.size > 0,
|
|
164
167
|
});
|
|
165
168
|
for (const slot of this.#slots.slice(this.#sizing.kept))
|
|
@@ -167,7 +170,7 @@ export class Pool {
|
|
|
167
170
|
if (this.#sizing.current === this.#queue.concurrency)
|
|
168
171
|
return;
|
|
169
172
|
this.#queue.concurrency = this.#sizing.current;
|
|
170
|
-
this.#resized = performance.now();
|
|
173
|
+
this.#resized = this.#clock.performance.now();
|
|
171
174
|
// An idle worker waits for its eviction only while the pool runs its slot.
|
|
172
175
|
for (const slot of this.#slots.slice(0, this.#sizing.kept)) {
|
|
173
176
|
const state = slot.state;
|
|
@@ -212,7 +215,7 @@ export class Pool {
|
|
|
212
215
|
})
|
|
213
216
|
.then((worker) => {
|
|
214
217
|
if (slot.state.kind === 'starting' && slot.state.outcome === outcome)
|
|
215
|
-
this.#rest(slot, worker, performance.now());
|
|
218
|
+
this.#rest(slot, worker, this.#clock.performance.now());
|
|
216
219
|
outcome.open({ status: 'fulfilled', value: worker });
|
|
217
220
|
turn.resolve();
|
|
218
221
|
void worker.exited().then(() => this.#ended(slot, worker));
|
|
@@ -246,7 +249,7 @@ export class Pool {
|
|
|
246
249
|
state.idle.abort();
|
|
247
250
|
return;
|
|
248
251
|
}
|
|
249
|
-
this.#eviction.idle(AbortSignal.any([state.idle.signal, this.#stopped.signal]), () => this.#evict(slot, state));
|
|
252
|
+
this.#eviction.idle(AbortSignal.any([state.idle.signal, this.#stopped.signal]), () => this.#evict(slot, state), this.#clock);
|
|
250
253
|
}
|
|
251
254
|
// Closes an idle worker that its eviction let go. The slot is empty before
|
|
252
255
|
// the worker closes, so its exit starts no back-off and no replacement. A
|
|
@@ -257,7 +260,7 @@ export class Pool {
|
|
|
257
260
|
slot.index >= this.#sizing.current ||
|
|
258
261
|
this.#stopped.signal.aborted)
|
|
259
262
|
return;
|
|
260
|
-
if (performance.now() - state.since >= backoff.reset)
|
|
263
|
+
if (this.#clock.performance.now() - state.since >= backoff.reset)
|
|
261
264
|
slot.early = 0;
|
|
262
265
|
this.#retire(slot);
|
|
263
266
|
}
|
|
@@ -284,7 +287,10 @@ export class Pool {
|
|
|
284
287
|
return;
|
|
285
288
|
this.#enter(slot, { kind: 'empty' });
|
|
286
289
|
void this.#close(worker);
|
|
287
|
-
slot.early =
|
|
290
|
+
slot.early =
|
|
291
|
+
this.#clock.performance.now() - since < backoff.reset
|
|
292
|
+
? slot.early + 1
|
|
293
|
+
: 0;
|
|
288
294
|
if (slot.index >= this.#sizing.current)
|
|
289
295
|
return;
|
|
290
296
|
if (slot.early === 0) {
|
|
@@ -294,7 +300,7 @@ export class Pool {
|
|
|
294
300
|
const delay = Math.min(backoff.first * 2 ** (slot.early - 1), backoff.most);
|
|
295
301
|
this.#enter(slot, {
|
|
296
302
|
kind: 'backoff',
|
|
297
|
-
timer: setTimeout(() => {
|
|
303
|
+
timer: this.#clock.setTimeout(() => {
|
|
298
304
|
this.#enter(slot, { kind: 'empty' });
|
|
299
305
|
if (slot.index < this.#sizing.current)
|
|
300
306
|
this.#spawn(slot);
|
|
@@ -310,7 +316,7 @@ export class Pool {
|
|
|
310
316
|
if (state.kind === 'ready' || state.kind === 'lost')
|
|
311
317
|
void this.#close(state.worker);
|
|
312
318
|
else if (state.kind === 'backoff')
|
|
313
|
-
clearTimeout(state.timer);
|
|
319
|
+
this.#clock.clearTimeout(state.timer);
|
|
314
320
|
else if (state.kind === 'starting')
|
|
315
321
|
void settled(state.outcome).then((worker) => this.#close(worker), () => undefined);
|
|
316
322
|
}
|
|
@@ -322,7 +328,7 @@ export class Pool {
|
|
|
322
328
|
this.#stopped.abort();
|
|
323
329
|
for (const { state } of this.#slots)
|
|
324
330
|
if (state.kind === 'backoff')
|
|
325
|
-
clearTimeout(state.timer);
|
|
331
|
+
this.#clock.clearTimeout(state.timer);
|
|
326
332
|
for (const worker of this.#workers)
|
|
327
333
|
worker.kill();
|
|
328
334
|
await Promise.all([...this.#workers].map((worker) => worker.close()));
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|
package/dist/resources.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import { type CapacityOptions } from './capacity.ts';
|
|
1
2
|
import type { Sizing } from './sizing.ts';
|
|
2
3
|
export declare class Resources implements Sizing {
|
|
3
4
|
readonly ceiling: number;
|
|
4
5
|
readonly current: number;
|
|
5
6
|
readonly kept: number;
|
|
6
|
-
constructor(options:
|
|
7
|
-
memoryPerWorker: number;
|
|
8
|
-
});
|
|
7
|
+
constructor(options: CapacityOptions);
|
|
9
8
|
record(): void;
|
|
10
9
|
}
|
|
11
10
|
//# sourceMappingURL=resources.d.ts.map
|
package/dist/resources.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,qBAAa,SAAU,YAAW,MAAM;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,eAAe;IAMpC,MAAM,IAAI,IAAI;CACf"}
|
package/dist/resources.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { capacity } from "./capacity.js";
|
|
2
|
-
// Runs as many workers as the
|
|
3
|
-
// CPU, while each finds memoryPerWorker free.
|
|
2
|
+
// Runs as many workers as the computer affords when the pool is built: one
|
|
3
|
+
// per CPU, while each finds memoryPerWorker free.
|
|
4
4
|
export class Resources {
|
|
5
5
|
ceiling;
|
|
6
6
|
current;
|
|
7
7
|
kept;
|
|
8
8
|
constructor(options) {
|
|
9
|
-
this.ceiling = capacity(options
|
|
9
|
+
this.ceiling = capacity(options);
|
|
10
10
|
this.current = this.ceiling;
|
|
11
11
|
this.kept = this.ceiling;
|
|
12
12
|
}
|
package/dist/resources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG/D,2EAA2E;AAC3E,kDAAkD;AAClD,MAAM,OAAO,SAAS;IACX,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,IAAI,CAAS;IAEtB,YAAY,OAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,KAAU,CAAC;CAClB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zukhruf/pool",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.15",
|
|
4
4
|
"description": "Lend long-lived workers, such as native helper processes, to one job at a time: startups that decide when workers start, sizings that decide how many run, evictions that decide when an idle worker closes, and replacement of a worker that exits.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -41,10 +41,11 @@
|
|
|
41
41
|
"access": "public"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@zukhruf/async": "^0.6.
|
|
44
|
+
"@zukhruf/async": "^0.6.15",
|
|
45
45
|
"p-queue": "10.0.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@
|
|
48
|
+
"@sinonjs/fake-timers": "15.4.0",
|
|
49
|
+
"@zukhruf/testing": "^0.6.15"
|
|
49
50
|
}
|
|
50
51
|
}
|