Планировщик Go (GMP) сначала проверяет локальную очередь текущего P. Если там пусто — пытается украсть работу у другого P (work stealing). Также каждые ~61 итерацию проверяет глобальную очередь, чтобы горутины там не зависали. Приоритет отдаётся горутинам, которые только что разблокировались — они попадают в runnext слот P.
Как планировщик выбирает какую горутину запустить?
Middle+
185 просмотровAFK Offer AI
Что выведет: func f() { defer func() { fmt.Println(recover()) }(); panic("oops"); fmt.Println("after panic") }?