Threads can claim run queues (via the processor) - if a kernel thread is blocked by a system call, the scheduler will handover to an idle thread.

All run queues within the go scheduler are FIFO. Goroutines in the global run queue are checked less frequently than the local run queues.

If a thread is idle, it will attempt to “steal work” from another run queue, half the goroutines will be transferred to the empty run queue.

Idle threads will “spin” and look for work in the global run queue and then check the network poller.