Discrete-event simulation of worker-thread dispatch: compare FIFO, SJF, Priority, Round Robin and WFQ-like scheduling on the same workload.
Pick a workload, set the server parameters, then run one or more schedulers on exactly the same input.
Applied by the Round Robin scheduler only.
Charged to every slice handed to a worker.
Every scheduler below processed the same requests, threads, quantum and overhead. Best value per column is highlighted; “dispatches” counts how many slices were handed to workers.
| Scheduler | Avg waiting (s) | Avg turnaround (s) | Avg response (s) | Throughput (req/s) | Fairness (Jain) | Makespan (s) | Dispatches |
|---|
One row per worker thread. Each block is a slice the scheduler handed to that worker; colour identifies the client. Use the controls to observe when requests are dispatched, how long they wait and how work interleaves.
Columns match the CSV written by the command-line version.
| ID | client | arrival | start | finish | waiting | turnaround | response | thread |
|---|
| client | requests | data (MB) | active span (s) | MB/s |
|---|
| thread | busy (s) | utilisation |
|---|
The JavaScript core (engine.js) mirrors the C++ modules scheduler, simulation_engine and metrics operation by operation, including the heap procedures used by the C++ standard library implementation and the tie-breaking rules among equal keys. Across 12 reference configurations and all five schedulers the port reproduces 2455 per-request rows and 60 summary rows of the command-line output; the largest deviation observed is 4.99e-5, inside the four-decimal rounding of the CSV the CLI writes. You can re-run the whole comparison yourself on the equivalence check page: it replays those twelve workloads in your browser against the CSV files recorded from the command-line simulator, which are stored as plain text in oracle_bundle.js.