🤔 Вопрос с собеседования
Что произойдёт, если одна горутина надолго зациклится на CPU и не будет делать ни sleep, ни syscall, ни операций с каналами?
❤️ — вторая горутина не выполнится, потому что P всего один
🔥 — планировщик вытеснит первую горутину и запустит вторую
👍 — вторая выполнится только после runtime.Gosched()
👇 Правильный ответ (нажми, чтобы прочитать):
🔥 Начиная с Go 1.14 планировщик поддерживает асинхронное вытеснение. Поэтому даже CPU-bound горутина, которая не блокируется и не вызывает runtime-функции, не может бесконечно удерживать P.
GOMAXPROCS(1) означает, что одновременно выполняется только одна горутина, но планировщик может переключать между несколькими G.
До Go 1.14 такой бесконечный цикл действительно мог надолго заблокировать выполнение других горутин.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Post #7480
4.36K

- 🔥 64
- ❤ 4
- 👍 3
- 🤔 1