Event Loop and Source Panels
Event Queue Model
Model an event queue without timers.
event-queue
An event loop repeatedly takes the next queued task and runs it. This deterministic model keeps the queue visible without using real timers.
Event Queue Model
event_queue_model.js
Replay: real traced execution (multi-file project)
const extra = "audit";
const queue = ["read", extra, "write"];
const log = [];
while (queue.length > 0) {
const task = queue.shift();
log.push("run:" + task);
}
console.log("extra=" + extra);
console.log("log=" + log.join(","));
const extra = "sync";
const queue = ["read", extra, "write"];
const log = [];
while (queue.length > 0) {
const task = queue.shift();
log.push("run:" + task);
}
console.log("extra=" + extra);
console.log("log=" + log.join(","));
const extra = "render";
const queue = ["read", extra, "write"];
const log = [];
while (queue.length > 0) {
const task = queue.shift();
log.push("run:" + task);
}
console.log("extra=" + extra);
console.log("log=" + log.join(","));
extra ← audit, queue ← read,audit,write
1const extra→ audit = "audit"; //@extra="sync", "render"2const queue→ read,audit,write = ["read", extraaudit, "write"];3const log = [];queue ← audit,write, task ← read
pass 1 of 32const queue = ["read", extra, "write"];3const log = [];45while (queue.length3 > 0) {6 const task→ read = queue→ audit,write.shift();7 log.push("run:" + taskread);8}All 3 passes — pass 1 is the card above pass queue.lengthqueuetask1 3 read,audit,write → audit,write read 2 2 audit,write → write audit 3 1 write → (empty) write console.log("extra=" + extra);
7 log.push("run:" + task);8}910console.log("extra=" + extraaudit);11console.log("log=" + log.join(","));outputextra=audit log=run:read,run:audit,run:write
extra ← sync, queue ← read,sync,write
1const extra→ sync = "sync";2const queue→ read,sync,write = ["read", extrasync, "write"];3const log = [];queue ← sync,write, task ← read
pass 1 of 32const queue = ["read", extra, "write"];3const log = [];45while (queue.length3 > 0) {6 const task→ read = queue→ sync,write.shift();7 log.push("run:" + taskread);8}All 3 passes — pass 1 is the card above pass queue.lengthqueuetask1 3 read,sync,write → sync,write read 2 2 sync,write → write sync 3 1 write → (empty) write console.log("extra=" + extra);
7 log.push("run:" + task);8}910console.log("extra=" + extrasync);11console.log("log=" + log.join(","));outputextra=sync log=run:read,run:sync,run:write
extra ← render, queue ← read,render,write
1const extra→ render = "render";2const queue→ read,render,write = ["read", extrarender, "write"];3const log = [];queue ← render,write, task ← read
pass 1 of 32const queue = ["read", extra, "write"];3const log = [];45while (queue.length3 > 0) {6 const task→ read = queue→ render,write.shift();7 log.push("run:" + taskread);8}All 3 passes — pass 1 is the card above pass queue.lengthqueuetask1 3 read,render,write → render,write read 2 2 render,write → write render 3 1 write → (empty) write console.log("extra=" + extra);
7 log.push("run:" + task);8}910console.log("extra=" + extrarender);11console.log("log=" + log.join(","));outputextra=render log=run:read,run:render,run:write