У каждого P - локальная очередь горутин (runqueue). Есть глобальная очередь (редко используется при нормальной загрузке). При нехватке работы P забирает половину горутин у другого P (work stealing). Новые горутины обычно попадают в локальную очередь P создателя.