Size: a a a

2021 March 18

b

badtrousers in rust_offtopic
G = goroutine, P = processor, M = thread

When you schedule a new goroutine, it is placed into P‘s queue. There is this interesting work-stealing scheduling algorithm, which runs when M finishes executing some G and then it tries to take another G out of a queue, which is empty, then it randomly chooses another P and tries to steal a half of runnable G’s from it!

Interesting things happen when your goroutine makes a blocking syscall. Blocking syscall will be intercepted, if there are Gs to run, runtime will detach the thread from the P and create a new OS thread (if idle thread doesn’t exist) to service that processor.
источник

МП

Мимо Проходящий... in rust_offtopic
Αλεχ Zhukovsky
у тебя есть гринтред который выполняет некий поток инструкций. Когда он спотыкается о WaitAsync и не может продолжить выполнение то он передает шедулеру "возобнови меня пожалуйста со строки Х когда разблокируется", шедулер видит что поток свободен и начинает на нем выплнять другой "поток инструкций" пока тот не закончится или не скажет что тоже встрял.

Конец
> у тебя есть гринтред который выполняет некий поток инструкций.

какой к херам гринтред, если потоки для выполнения асинзронных тасок берутся из специального пула?) почитай уже матчасть блин)

> Когда он спотыкается о WaitAsync и не может продолжить выполнение

он возвращается в пул и говорит таске досвидос

> шедулер видит что поток свободен и начинает на нем выплнять другой "поток инструкций"

шедулер асинхронных тасок берёт новый поток из пула (либо спавнит новый тред ОС), и начинает в нём выполнять таску. При этом контекст потока переключается на контекст таски

вот тебе рыба
https://habr.com/ru/post/139734/
https://habr.com/ru/post/470830/
https://habr.com/ru/post/257221/
источник

А

Алексей in rust_offtopic
"M = thread"
лол
источник

b

badtrousers in rust_offtopic
как вы можете видеть, устройство шедулера несколько сложнее, чем WaitAsync мутекс
источник

b

badtrousers in rust_offtopic
шедулера в го
источник

b

badtrousers in rust_offtopic
советую почитать дизайн док дмитрия вьюкова
источник

b

badtrousers in rust_offtopic
источник

b

badtrousers in rust_offtopic
прошу обратить внимание что это 2012 год
источник

b

badtrousers in rust_offtopic
завидуете?
источник

b

badtrousers in rust_offtopic
правильно
источник

SP

Stanislav Popov in rust_offtopic
если бы го был такой хороший уже бы сделали какой то нормальный язык под этот чудный IL
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Мимо Проходящий
> у тебя есть гринтред который выполняет некий поток инструкций.

какой к херам гринтред, если потоки для выполнения асинзронных тасок берутся из специального пула?) почитай уже матчасть блин)

> Когда он спотыкается о WaitAsync и не может продолжить выполнение

он возвращается в пул и говорит таске досвидос

> шедулер видит что поток свободен и начинает на нем выплнять другой "поток инструкций"

шедулер асинхронных тасок берёт новый поток из пула (либо спавнит новый тред ОС), и начинает в нём выполнять таску. При этом контекст потока переключается на контекст таски

вот тебе рыба
https://habr.com/ru/post/139734/
https://habr.com/ru/post/470830/
https://habr.com/ru/post/257221/
> какой к херам гринтред, если потоки для выполнения асинзронных тасок берутся из специального пула?) почитай уже матчасть блин)

Обычные, таска - это гринтред. То что у тебя шедулер го берет потоки для выполнения из специального пула - ничего, да?

> он возвращается в пул и говорит таске досвидос

Не возвращается

> шедулер асинхронных тасок берёт новый поток из пула (либо спавнит новый тред ОС), и начинает в нём выполнять таску. При этом контекст потока переключается на контекст таски

Как заимплементишь - так и будет. Дефолтный шедулер потоков лишних не делает
источник

b

badtrousers in rust_offtopic
Stanislav Popov
если бы го был такой хороший уже бы сделали какой то нормальный язык под этот чудный IL
есть полно таких инициатив
источник

А

Алексей in rust_offtopic
badtrousers
завидуете?
хороший дизайн гринтредов под капотом к сожалению не отменяет говёность самого языка
источник

D

Dima in rust_offtopic
badtrousers
завидуете?
не знаю стоит ли завидовать, но tokio sheduler много идей из имплементации go sheduler-а заимствовал)
источник

b

badtrousers in rust_offtopic
Dima
не знаю стоит ли завидовать, но tokio sheduler много идей из имплементации go sheduler-а заимствовал)
да только сисколльная ловкость рук для него недоступна!
источник

b

badtrousers in rust_offtopic
а это самые потняки
источник

D

Dima in rust_offtopic
badtrousers
да только сисколльная ловкость рук для него недоступна!
это да, приходится явно указывать что можешь тут заблочиться
источник

SP

Stanislav Popov in rust_offtopic
раст ворует отовсюду
источник

H

Hirrolot in rust_offtopic
а почему не в латексе? так не годится
источник