механизм
Зачем спорить то?)
Тогда к чему вопросы? Там все ясно написано.
Ну там инспекция в signal handler, AFAIK. И прерывание через него.
Ну какая разница из-за чего дёргается инспекция. Речь была про то, как и кто размечает код и расставляет сейфпоинты.
Ну компилятор навтыкал флажков + инспекция в обработчике
// Preemption at asynchronous safe-points is implemented by suspending // the thread using an OS mechanism (e.g., signals) там ясно написано про вытеснение и как оно реализовано, а не юзерспейс и ядерный планировщик
Ну. Да. Ты сам ответил на свой вопрос "Почему бы руками не вызывать планировщик?" Потому что это можно автоматизировать и оптимизировать.
Ядро ничего не знает про горутины. Оно не планирует их выполнение.
Меня смутила история про планировщик в отдельном треде и какую-то инспекцию извне. С таким же успехом можно было вместо safe points раскладывать runtime.Goshed() срабатывающий в какой-то % итераций
там скорее unsafe points, нежели чем safe points
я боюсь оно не очень эффективно будет раскладываться
Goshed, вроде, просто помечает горутину безопасной и дёргает планировщик. У него масштаб другой. А то за тебя компилятор все точечно разметит под каждую конкретную архитектуру процессора, на уровне инструкций.
Хотя, признаюсь честно что идея с сигналами-изящная
оно только на *nix на сигналах
Обсуждают сегодня