Websocket CPU efficiency improvements. #711
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I see high cpu usage using the
fsdocs watch
command in currentrelease version. It appears that the loop inside the socket is running
constantly since it never yields to receive socket messages from the
client, causing the process to use 100% of available CPU. Also, since
the reload creates a new socket connection (and suave creates a new
handler) this compounds since a new infinite loop is created after
every reload.
I've replaced the mutable boolean with a ManualResetEvent which all
connected sockets block on until a reload is called for. Once the
socket connection is closed the old handler exits. I chose
ManualResetEvent over AutoResetEvent because we want all connected
sockets to restart at the same time, rather than individually, since
someone might have multiple tabs open.