Workaround for the high cpu usage issue in coroutines on linux (#5186)

Fixes high cpu usage when all coroutines are asleep
This commit is contained in:
Dmitriy Fomichev 2017-01-11 13:01:03 +04:00 • committed by Andreas Rumpf
commit d356c37185

View file

@ -66,14 +66,14 @@ proc run*() =
## Starts main event loop which exits when all coroutines exit. Calling this proc ## Starts main event loop which exits when all coroutines exit. Calling this proc
## starts execution of first coroutine. ## starts execution of first coroutine.
var node = coroutines.head var node = coroutines.head
var minDelay: float = 0 var minDelay: int = 0 # in milliseconds
var frame: PFrame var frame: PFrame
while node != nil: while node != nil:
var coro = node.value var coro = node.value
current = coro current = coro
os.sleep(int(minDelay * 1000)) os.sleep(minDelay)
var remaining = coro.sleepTime - (epochTime() - coro.lastRun); var remaining = int((coro.sleepTime - (epochTime() - coro.lastRun)) * 1000)
if remaining <= 0: if remaining <= 0:
remaining = 0 remaining = 0
let res = setjmp(mainCtx) let res = setjmp(mainCtx)