Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 4

Спасибо за статью. Был бы рад увидеть продолжение на тему кооперативной многозадачности в Go. Насколько я знаю, в последних версиях Go (с какой именно версии не помню) паралельно ввели вытесняющую многозадачность.

Если я прав, то рантайм Go должен уметь переключать контекст на другую горутину, если выполняемая горутина слишком долго не передает управление даже если запущенная горутина не вызывает каких либо блокинующую операцию.

Насколько я знаю это нельзя назвать полноценной вытесняющей многозадачностью. Проблема с кооперативным подходом была в том что сборщик мусора перед запуском должен остановить все корутины. Т.е. он ставит на паузу планировщик и новые корутины не запускаются, а уже работающие доходят до точки переключения и останавливаются. Понятно что если конкретная корутина выполняется очень долго до точки переключения то это убивают всю производительность, т.к. все корутины остановлены кроме одной. Решили это внедрением "костыля" - компилятор вставляет возможные точки остановки в код не только в места ввода-вывода, а и в другие места такие как вызовы функций и циклы.

Отличная статья! Большое вам спасибо!

Вопрос не по теме, прошу простить и понять.

Где найти решение следующей задачи. Задача, отслеживать изменение конкретной зоны на странице в Гугл хроме, при изменении отправлять email. Проверка раз в секунду нужна. Пожалуйста, помогите советом, благодарю

Зарегистрируйтесь на Хабре, чтобы оставить комментарий