Size: a a a

2021 July 14

AN

Alexander N in Go-go!
Там все примерно так работает: - В определенных точках компилятор вставляет код, который выставляет флаг или семафор "можно прерываться". - Планировщик периодически вызывает isAsyncSafePoint, который этот флаг проверяет. Если он выставлен, тогда он забирает управление у горутины.


вот выше товарищ писал
источник

p

pragus in Go-go!
От ситуации зависит. Запись + барьер, например
источник

AN

Alexander N in Go-go!
Хотя тут где-то в чате по-соседству товарищ убивался про то что у него медленно работает
источник

p

pragus in Go-go!
А зачем так? Почему не втыкать просто вызов планировщика
источник

C

Calculon in Go-go!
лень
источник

V

V---V in Go-go!
Как такой цикл ренжится по всем элементам, которые в него передаются? Канал не буферизированный, и в момент итерации в нем только одно значение.
for num := range intCh{
       fmt.Println(num)
   }
источник

V

V---V in Go-go!
В канал передаются значения в цикле, это да.
источник

V

V---V in Go-go!
Но ведь ренж один раз проходит по всем элементам?
источник

V

V---V in Go-go!
Но в тот момент, когда он это делает, в канале только одно значение.
источник

S

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

p

pragus in Go-go!
Можно просто втыкать вызов планировщика. Как это делается в случае с каким-то time.Sleep
источник

S

S in Go-go!
В каждой строке кода Go-приложения?
источник

p

pragus in Go-go!
Зачем в каждой строке? Вот сейчас в какой момент происходит переключение в tight loops?
источник

S

S in Go-go!
Компилятор анализирует инструкции и вставляет асинхронные "точки безопасности" в местах, где используются не временные регистры.
источник

C

Calculon in Go-go!
safe points - точки безопасности
источник

C

Calculon in Go-go!
лучше такие вещи не переводить
источник

p

pragus in Go-go!
Тааак ..  а переключение когда происходит? )
источник

S

S in Go-go!
Асинхронно, когда планировщик решит проверить состояние горутины. И увидит, что она в безопасном для вытеснения состонии.
источник

p

pragus in Go-go!
Ну, допустим, мы в safe point, как горутину прервать?
источник

ВС

Владимир Столяров... in Go-go!
Тут же писали, что вытесняющая часть положена на системный планировщик
источник