запуске 10 бесконечных горутин они все выполняются? Ведь:
1. Горутина никогда не прерывается из-за времени выполнения
2. Количество процессоров планировщика, обрабатывающих горутины, равно кол-ву ядер физического процессора
3. Одновременно каждый процессор выполняет только одну горутину
По идее при P=4 у меня может быть запущено максимум 4 бесконечных горутины, а оставшиеся так и не будут вызваны. В чём я ошибаюсь?
https://play.golang.org/p/esFG7YyF2ky
у вас после цикла for и time.Sleep приложение завершается, а с ним и все его горутины
Не очень понял, о чём вы. Я не понимаю, почему у меня вообще запускаются все 10 горутин, если ядер процессора очевидно меньше?
горутина != thread, процесс
Максимум будет вызвано 4 параллельных горутины, но не асинхронных. Горутин вы можете запустить очень много, если позволяет оперативная память, но они будут менять свой контекст, т.е. процессор будет переключаться между выполнениями
потому что у нас есть шедулер
Да, но вот тут написано, что процессор одновременно выполняет только одну горутину - https://morsmachine.dk/go-scheduler В какой момент он решает переключитья на другую?
Под процессором я имел в виду голанговскую абстракцию, если что
Он спрашивает, почему в горутинах работает одновременно несколько лупов в количестве больше чем ядер, ведь они работают постоянно(то есть, без ожидания, а значит переключений).
В момент когда срабатывает scheduler, очевидно
Так scheduler срабатывает после завершения горутины. А у меня ни одна не завершается
ну конкретно в его случае есть IO и в этот момент переключаются контексты
Обсуждают сегодня