thread: avoid repeated polls while scanning available threads
Poll for external events just once before starting a search for an available thread, instead of polling every iteration in the search.
This commit is contained in:
parent
6d200e6143
commit
97e61b5f25
|
@ -55,22 +55,22 @@
|
|||
(set! thread-swap-count 0))
|
||||
|
||||
(define (select-thread! [pending-callbacks null])
|
||||
(define callbacks (if (null? pending-callbacks)
|
||||
(host:poll-async-callbacks)
|
||||
pending-callbacks))
|
||||
(host:poll-will-executors)
|
||||
(poll-custodian-will-executor)
|
||||
(check-external-events 'fast)
|
||||
(call-pre-poll-external-callbacks)
|
||||
(check-place-activity)
|
||||
(check-queued-custodian-shutdown)
|
||||
(when (and (null? callbacks)
|
||||
(all-threads-poll-done?)
|
||||
(waiting-on-external-or-idle?))
|
||||
(or (check-external-events 'slow)
|
||||
(try-post-idle)
|
||||
(process-sleep)))
|
||||
(let loop ([g root-thread-group] [pending-callbacks pending-callbacks] [none-k maybe-done])
|
||||
(define callbacks (if (null? pending-callbacks)
|
||||
(host:poll-async-callbacks)
|
||||
pending-callbacks))
|
||||
(host:poll-will-executors)
|
||||
(poll-custodian-will-executor)
|
||||
(check-external-events 'fast)
|
||||
(call-pre-poll-external-callbacks)
|
||||
(check-place-activity)
|
||||
(check-queued-custodian-shutdown)
|
||||
(when (and (null? callbacks)
|
||||
(all-threads-poll-done?)
|
||||
(waiting-on-external-or-idle?))
|
||||
(or (check-external-events 'slow)
|
||||
(try-post-idle)
|
||||
(process-sleep)))
|
||||
(define child (thread-group-next! g))
|
||||
(cond
|
||||
[(not child) (none-k callbacks)]
|
||||
|
|
Loading…
Reference in New Issue
Block a user