Concurrency Coordination Reports
Async Queue Coordination Report
Drain an awaited work queue one item at a time and label the throughput from a deterministic count.
queue drain
An async queue report awaits each item in turn and keeps the drained count scalar, so the drain order never varies.
Async Queue Coordination Report
async_queue_coordination.js
Replay: real traced execution (multi-file project)
const pending = 4;
let drained = 0;
let outcome = "empty";
async function coordinate(count) {
const queue = Array.from({ length: count }, (_, i) => i + 1);
while (queue.length > 0) {
const item = queue.shift();
await Promise.resolve(item);
drained += 1;
}
if (drained >= 7) {
outcome = "backlog";
} else if (drained > 0) {
outcome = "flowing";
}
console.log(`pending=${count} drained=${drained} status=${outcome}`);
}
coordinate(pending);
const pending = 0;
let drained = 0;
let outcome = "empty";
async function coordinate(count) {
const queue = Array.from({ length: count }, (_, i) => i + 1);
while (queue.length > 0) {
const item = queue.shift();
await Promise.resolve(item);
drained += 1;
}
if (drained >= 7) {
outcome = "backlog";
} else if (drained > 0) {
outcome = "flowing";
}
console.log(`pending=${count} drained=${drained} status=${outcome}`);
}
coordinate(pending);
const pending = 7;
let drained = 0;
let outcome = "empty";
async function coordinate(count) {
const queue = Array.from({ length: count }, (_, i) => i + 1);
while (queue.length > 0) {
const item = queue.shift();
await Promise.resolve(item);
drained += 1;
}
if (drained >= 7) {
outcome = "backlog";
} else if (drained > 0) {
outcome = "flowing";
}
console.log(`pending=${count} drained=${drained} status=${outcome}`);
}
coordinate(pending);
pending ← 4, drained ← 0, outcome ← empty
1const pending→ 4 = 4; //@pending=0, 72let drained→ 0 = 0;3let outcome→ empty = "empty";45async function coordinate(count) {6 const queue = Array.from({ length: count }, (_, i) => i + 1);7 while (queue.length > 0) {8 const item = queue.shift();9 await Promise.resolve(item);10 drained += 1;11 }12 if (drained >= 7) {13 outcome = "backlog";14 } else if (drained > 0) {15 outcome = "flowing";16 }17 console.log(`pending=${count} drained=${drained} status=${outcome}`);18}1920coordinate(pending4);queue ← 1,2,3,4
2let drained = 0;3let outcome = "empty";45async function coordinate(count4) {6 const queue→ 1,2,3,4 = Array.from({ length: count4 }, (_, i) => i + 1);7 while (queue.length > 0) {queue ← 2,3,4, item ← 1
pass 1 of 45async function coordinate(count) {6 const queue = Array.from({ length: count }, (_, i) => i + 1);7 while (queue.length4 > 0) {8 const item→ 1 = queue→ 2,3,4.shift();9 await Promise.resolve(item1);10 drained += 1;All 4 passes — pass 1 is the card above pass queue.lengthqueueitemdrained1 4 1,2,3,4 → 2,3,4 1 — 2 3 2,3,4 → 3,4 2 2 3 2 3,4 → 4 3 3 4 1 4 → (empty) 4 4 drained ← 1
7 while (queue.length > 0) {8 const item = queue.shift();9 await Promise.resolve(item1);10 drained += 1;11 }12 if (drained >= 7) {13 outcome = "backlog";14 } else if (drained > 0) {15 outcome = "flowing";16 }17 console.log(`pending=${count} drained=${drained} status=${outcome}`);18}1920coordinate(pending4);values this step1drainedif (drained > 0)
13 outcome = "backlog";14} else if (drained4 > 0) {15 outcome = "flowing";16}console.log(`pending=${count} drained=${drained} status=${outcome}`);
15 outcome = "flowing";16 }17 console.log(`pending=${count4} drained=${drained4} status=${outcomeflowing}`);18}outputpending=4 drained=4 status=flowing
pending ← 0, drained ← 0, outcome ← empty
1const pending→ 0 = 0;2let drained→ 0 = 0;3let outcome→ empty = "empty";45async function coordinate(count) {6 const queue = Array.from({ length: count }, (_, i) => i + 1);7 while (queue.length > 0) {8 const item = queue.shift();9 await Promise.resolve(item);10 drained += 1;11 }12 if (drained >= 7) {13 outcome = "backlog";14 } else if (drained > 0) {15 outcome = "flowing";16 }17 console.log(`pending=${count} drained=${drained} status=${outcome}`);18}1920coordinate(pending0);queue ← (empty)
2let drained = 0;3let outcome = "empty";45async function coordinate(count0) {6 const queue→ (empty) = Array.from({ length: count0 }, (_, i) => i + 1);7 while (queue.length > 0) {8 const item = queue.shift();9 await Promise.resolve(item);10 drained += 1;11 }12 if (drained >= 7) {13 outcome = "backlog";14 } else if (drained > 0) {15 outcome = "flowing";16 }17 console.log(`pending=${count0} drained=${drained0} status=${outcomeempty}`);18}outputpending=0 drained=0 status=emptycoordinate(pending);
17 console.log(`pending=${count} drained=${drained} status=${outcome}`);18}1920coordinate(pending0);
pending ← 7, drained ← 0, outcome ← empty
1const pending→ 7 = 7;2let drained→ 0 = 0;3let outcome→ empty = "empty";45async function coordinate(count) {6 const queue = Array.from({ length: count }, (_, i) => i + 1);7 while (queue.length > 0) {8 const item = queue.shift();9 await Promise.resolve(item);10 drained += 1;11 }12 if (drained >= 7) {13 outcome = "backlog";14 } else if (drained > 0) {15 outcome = "flowing";16 }17 console.log(`pending=${count} drained=${drained} status=${outcome}`);18}1920coordinate(pending7);queue ← 1,2,3,4,5,6,7
2let drained = 0;3let outcome = "empty";45async function coordinate(count7) {6 const queue→ 1,2,3,4,5,6,7 = Array.from({ length: count7 }, (_, i) => i + 1);7 while (queue.length > 0) {queue ← 2,3,4,5,6,7, item ← 1
pass 1 of 75async function coordinate(count) {6 const queue = Array.from({ length: count }, (_, i) => i + 1);7 while (queue.length7 > 0) {8 const item→ 1 = queue→ 2,3,4,5,6,7.shift();9 await Promise.resolve(item1);10 drained += 1;All 7 passes — pass 1 is the card above pass queue.lengthqueueitemdrained1 7 1,2,3,4,5,6,7 → 2,3,4,5,6,7 1 — 2 6 2,3,4,5,6,7 → 3,4,5,6,7 2 2 3 5 3,4,5,6,7 → 4,5,6,7 3 3 4 4 4,5,6,7 → 5,6,7 4 4 5 3 5,6,7 → 6,7 5 5 6 2 6,7 → 7 6 6 7 1 7 → (empty) 7 7 drained ← 1
7 while (queue.length > 0) {8 const item = queue.shift();9 await Promise.resolve(item1);10 drained += 1;11 }12 if (drained >= 7) {13 outcome = "backlog";14 } else if (drained > 0) {15 outcome = "flowing";16 }17 console.log(`pending=${count} drained=${drained} status=${outcome}`);18}1920coordinate(pending7);values this step1drainedif (drained >= 7)
10 drained += 1;11}12if (drained7 >= 7) {13 outcome = "backlog";14} else if (drained > 0) {console.log(`pending=${count} drained=${drained} status=${outcome}`);
15 outcome = "flowing";16 }17 console.log(`pending=${count7} drained=${drained7} status=${outcomebacklog}`);18}outputpending=7 drained=7 status=backlog