Skip to content

fix high cpu load in web version #66#78

Open
luginf wants to merge 1 commit intoflagxor:mainfrom
luginf:main
Open

fix high cpu load in web version #66#78
luginf wants to merge 1 commit intoflagxor:mainfrom
luginf:main

Conversation

@luginf
Copy link
Copy Markdown

@luginf luginf commented May 6, 2026

(sorry @flagxor I've used a LLM for fixing this, here is the report, it seemed to be a legit bug)

Three changes in web/utils.fs:

  1. web-key: begin pause web-key-raw... → begin pause? if pause else yield then web-key-raw...

Exact mirror of the POSIX fix in termios-key: when other tasks are running, cooperate via pause; when
alone, hand control back to the browser via yield.

  1. web-key?: same pause?/yield pattern.

  2. yielding: begin 50 ms yield again → begin pause yield again

This was the main source of the problem: 50 ms loops via pause for 50 real milliseconds at full CPU
before calling yield. With begin pause yield again, the sequence becomes: pause (yields to other tasks)
→ yield (hands control back to the browser) → the browser calls back via setTimeout(run, 0) ~4ms
later. The VM now only runs for a few microseconds per 4ms cycle → near-zero CPU usage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant