Skip to content

Commit bdedcb2

Browse files
committed
chore: delete resolved promises
1 parent d049a41 commit bdedcb2

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

src/threading/parallel.mjs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -90,24 +90,30 @@ export default function createParallelWorker(generatorName, pool, options) {
9090
{ generator: generatorName, chunks: chunks.length, chunkSize, threads }
9191
);
9292

93-
// Submit all tasks to Piscina and wrap with index tracking
94-
const pending = chunks.map((indices, i) =>
95-
pool
96-
.run(createTask(generator, fullInput, indices, opts, generatorName))
97-
.then(result => ({ i, result }))
93+
// Submit all tasks to Piscina - each promise resolves to itself for removal
94+
const pending = new Set(
95+
chunks.map(indices => {
96+
const promise = pool
97+
.run(createTask(generator, fullInput, indices, opts, generatorName))
98+
.then(result => ({ promise, result }));
99+
100+
return promise;
101+
})
98102
);
99103

100104
// Yield results as they complete (true parallel collection)
101-
for (let completed = 0; completed < chunks.length; completed++) {
102-
const { i, result } = await Promise.race(pending);
105+
let completed = 0;
103106

104-
// Replace completed promise with one that never resolves
105-
pending[i] = new Promise(() => {});
107+
while (pending.size > 0) {
108+
const { promise, result } = await Promise.race(pending);
106109

107-
parallelLogger.debug(
108-
`Chunk ${completed + 1}/${chunks.length} completed`,
109-
{ generator: generatorName }
110-
);
110+
pending.delete(promise);
111+
112+
completed++;
113+
114+
parallelLogger.debug(`Chunk ${completed}/${chunks.length} completed`, {
115+
generator: generatorName,
116+
});
111117

112118
yield result;
113119
}

0 commit comments

Comments
 (0)