В Go есть кооперативные точки переключения и асинхронное вытеснение. Поэтому современный runtime нельзя описывать как исключительно кооперативный планировщик.
Какой тип планирования горутин используется в современных версиях Go runtime?
В Go есть кооперативные точки переключения и асинхронное вытеснение. Поэтому современный runtime нельзя описывать как исключительно кооперативный планировщик.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Go есть кооперативные точки переключения и асинхронное вытеснение. Поэтому современный runtime нельзя описывать как исключительно кооперативный планировщик.
Горутина может уступить выполнение при ожидании канала, блокировке или другом взаимодействии с runtime. Дополнительно асинхронное вытеснение позволяет прерывать длительное выполнение, в том числе некоторые циклы без вызовов функций.
Runtime использует безопасные для остановки точки и учитывает критические участки. Это не система жёсткого реального времени: фиксированная задержка запуска любой горутины не гарантируется. Поддержка вытеснения и её детали зависят от платформы и версии.