Комментарии 4
Спасибо за статью. Был бы рад увидеть продолжение на тему кооперативной многозадачности в Go. Насколько я знаю, в последних версиях Go (с какой именно версии не помню) паралельно ввели вытесняющую многозадачность.
Если я прав, то рантайм Go должен уметь переключать контекст на другую горутину, если выполняемая горутина слишком долго не передает управление даже если запущенная горутина не вызывает каких либо блокинующую операцию.
Насколько я знаю это нельзя назвать полноценной вытесняющей многозадачностью. Проблема с кооперативным подходом была в том что сборщик мусора перед запуском должен остановить все корутины. Т.е. он ставит на паузу планировщик и новые корутины не запускаются, а уже работающие доходят до точки переключения и останавливаются. Понятно что если конкретная корутина выполняется очень долго до точки переключения то это убивают всю производительность, т.к. все корутины остановлены кроме одной. Решили это внедрением "костыля" - компилятор вставляет возможные точки остановки в код не только в места ввода-вывода, а и в другие места такие как вызовы функций и циклы.
Отличная статья! Большое вам спасибо!
Вопрос не по теме, прошу простить и понять.
Где найти решение следующей задачи. Задача, отслеживать изменение конкретной зоны на странице в Гугл хроме, при изменении отправлять email. Проверка раз в секунду нужна. Пожалуйста, помогите советом, благодарю
Go: конкурентность и привязки к потокам в планировщике