An idle processor should not simply wait while runnable goroutines remain elsewhere. Work stealing lets the Go scheduler look into other processors’ local queues and take goroutines to execute. section 8.2.1
When one processor is idle
Suppose a four-core application has runnable goroutines pending in the global queue and local queues, while one processor has no goroutine to execute. After checking its own local queue, the scheduler can steal goroutines from another local queue instead of leaving that processor underused. section 8.2.1
Work stealing is one part of scheduling, not the same as preemption. Since Go 1.14, a goroutine running for about 10 milliseconds can be marked preemptible, allowing a long-running job to share CPU time. section 8.2.1




