Size: a a a

2021 July 14

p

pragus in Go-go!
Ну компилятор навтыкал флажков + инспекция в обработчике
источник

V

V---V in Go-go!
Понятно, не учел того что ренж будет ждать закрытия.
источник

с

сонная википедия... in Go-go!
// Preemption at asynchronous safe-points is implemented by suspending
// the thread using an OS mechanism (e.g., signals)

там ясно написано про вытеснение и как оно реализовано, а не юзерспейс и ядерный планировщик
источник

S

S in Go-go!
Ну. Да. Ты сам ответил на свой вопрос "Почему бы руками не вызывать планировщик?" Потому что это можно автоматизировать и оптимизировать.
источник

S

S in Go-go!
Ядро ничего не знает про горутины. Оно не планирует их выполнение.
источник

с

сонная википедия... in Go-go!
зато ядро знает про свои треды, на которых эти горутины исполняются
источник

с

сонная википедия... in Go-go!
что позволяет при помощи ОС останавливать их выполнение
источник

S

S in Go-go!
В Go используется M:N схема - на каждом ядерном потоке выполняется несколько горутин.
источник

с

сонная википедия... in Go-go!
M:N схема к этому вообще не имеет никакого отношения
источник

с

сонная википедия... in Go-go!
в один момент времени выполняется только одна горутина
источник

с

сонная википедия... in Go-go!
остальные остаются в очереди
источник

AS

Alexandr Sakharoff in Go-go!
Хотели уйти от блокирующих syscalls по максимуму, а вы обратно их тащите.
источник

S

S in Go-go!
Планирует их не ядро, а Go. Ставит на выполнение, переносит между потоками и снимает с выполнения - планировщик Go.
источник

с

сонная википедия... in Go-go!
от них никуда не уйдешь
разве что на bare metal гонять
источник

с

сонная википедия... in Go-go!
чтоб снимать с выполнения нужно вытеснять
чтоб вытеснять, надо просить об этом ОС и ее шедулер
источник

AS

Alexandr Sakharoff in Go-go!
Нет, не нужно.
источник

с

сонная википедия... in Go-go!
код без вызова шедулера внутри вы с выполнения без ОС не снимите
источник

S

S in Go-go!
Опять... ) В этом и смысл фичи асинхронного вытеснения - чтобы можно было вытеснять горутины, которые не вошли в ядро и не хотят отдавать управление.
источник

p

pragus in Go-go!
Меня смутила история про планировщик в отдельном треде и какую-то инспекцию извне.

С таким же успехом можно было вместо safe points раскладывать runtime.Goshed() срабатывающий в какой-то % итераций
источник

с

сонная википедия... in Go-go!
там скорее unsafe points, нежели чем safe points
источник