Size: a a a

2021 March 14

ΑZ

Αλεχ Zhukovsky in rust_offtopic
polunin.ai
а если await то нет
кстати в этом примере если авейт уберешь то тоже не скомпилится потому что для impl Future не реализован дисплей
источник

MB

Mikail Bagishov in rust_offtopic
Мимо Проходящий
Не совсем так. Горутины выполняются не на тредпуле, там  другой принцип. Вкратце - шедулер берёт инструкции из очереди и раскидывает по внутренним тредам, которые в колличестве GOMAXPROCS, но  есть нюансы. Если горутина "висит" (на IO), то да, создаётся доп. тред, который выкидывается по завершению повисшей горутины. Фишка в том, что к обычным блокировкам мьютексом и всяким вызовам epoll это не относится, только IO
> раскидывает по внутренним тредам

Ну вот токио тоже раскидывает футуры по нескольким тредам (и их количество привязано к кол-ву ядер а не кол-ву тасок).

Я все еще не вижу разницу.
источник

MB

Mikail Bagishov in rust_offtopic
И блокирующие треды создаются только для файлового IO
источник

MB

Mikail Bagishov in rust_offtopic
Операции с сокетами требуют ровно один дополнительный поток, делающий epoll.
Примитивы синхронизации и каналы, естестевнно, никаких фоновых потоков не создают
источник

МП

Мимо Проходящий... in rust_offtopic
Mikail Bagishov
> раскидывает по внутренним тредам

Ну вот токио тоже раскидывает футуры по нескольким тредам (и их количество привязано к кол-ву ядер а не кол-ву тасок).

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

МП

Мимо Проходящий... in rust_offtopic
Mikail Bagishov
Операции с сокетами требуют ровно один дополнительный поток, делающий epoll.
Примитивы синхронизации и каналы, естестевнно, никаких фоновых потоков не создают
асинхронное вычисление работает на треде ОС, соотв. обычный мьютекс блокирует тред ОС. гошный мьютекс не блокирует тред ОС
источник

MB

Mikail Bagishov in rust_offtopic
Мимо Проходящий
асинхронное вычисление работает на треде ОС, соотв. обычный мьютекс блокирует тред ОС. гошный мьютекс не блокирует тред ОС
Асинхронный мьютекс блокирует не тред ОС, а только таску.
источник

MB

Mikail Bagishov in rust_offtopic
Мимо Проходящий
разница - треды, по которым раскидываются горутины берутся не из пула, их фиксированное кол-во за вычетом специальных кейсов явного "зависания" горутины, которое невозможно сделать асинхронным.
Возможно, мы по-разному понимаем слово тредпул, попробую его не юзать.

Пока выходит, что и токио и го используют фиксированное количество тредов, чтобы запускать таски.
источник

МП

Мимо Проходящий... in rust_offtopic
Mikail Bagishov
И блокирующие треды создаются только для файлового IO
ещё для cpu bound и косвенно, для потоков, заблокированных примитивами синхронизации ОС
источник

МП

Мимо Проходящий... in rust_offtopic
Mikail Bagishov
Асинхронный мьютекс блокирует не тред ОС, а только таску.
поскольку таска заблокирована, при создании следующей таски возьмётся новый поток из пула, а заблокированный вернётся в пул только после анлока. Вот и получается, что тред таки вполне заблокирован
источник

MB

Mikail Bagishov in rust_offtopic
Мимо Проходящий
ещё для cpu bound и косвенно, для потоков, заблокированных примитивами синхронизации ОС
Блокироваться синхронными мьютексами - довольно странная идея.

А для cpu bound, кажется, стоит использовать специализированные для этого либы (но это не точно)
источник

MB

Mikail Bagishov in rust_offtopic
Мимо Проходящий
поскольку таска заблокирована, при создании следующей таски возьмётся новый поток из пула, а заблокированный вернётся в пул только после анлока. Вот и получается, что тред таки вполне заблокирован
Почему же?
Таска попыталась взять залоканный мьютекс, мьютекс сказал таске Pending, таска сказала Pending экзекутору, экзекутор положил ее в список заблокированных тасок и начал на этом же потоке выполнять другую таску
источник

MB

Mikail Bagishov in rust_offtopic
Мьютекс при этом запомнил, что таска хотела его залокать.
Когда мьютекс освободится, он скажет "я свободен", экзекутор поместит таску в очередь на выполнение, потом какой-то из тредов и возьмет и начнет исполнять.
источник

MB

Mikail Bagishov in rust_offtopic
Конкретно это происходит через механизм Waker (https://doc.rust-lang.org/stable/std/task/struct.Waker.html)
источник

МП

Мимо Проходящий... in rust_offtopic
Mikail Bagishov
Блокироваться синхронными мьютексами - довольно странная идея.

А для cpu bound, кажется, стоит использовать специализированные для этого либы (но это не точно)
> Блокироваться синхронными мьютексами - довольно странная идея.

ну почему же странная. Мьютексы для блокировки - логично? Вот ими и блокируют. По крайней мере в сишарпе, я больше про него. Альтернатива - сами понимаете наверное что -  акторы сообщения, адок.

асинхронные мьютексы в расте я пока только щупал, на счёт того как они в реальности себя ведут на всех кейсах - не в курсе.
источник

А

Алексей in rust_offtopic
Мимо Проходящий
> Блокироваться синхронными мьютексами - довольно странная идея.

ну почему же странная. Мьютексы для блокировки - логично? Вот ими и блокируют. По крайней мере в сишарпе, я больше про него. Альтернатива - сами понимаете наверное что -  акторы сообщения, адок.

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

А

Алексей in rust_offtopic
это вполне логичное предположение на мой взгляд
источник

МП

Мимо Проходящий... in rust_offtopic
Алексей
я не знаю что там у го под капотом, но что-то мне кажется, что мьютексы именно блочат горутины, а не целый тред
крестица нада когда кажется) нет, тред ОС они точно не блочат
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Мимо Проходящий
крестица нада когда кажется) нет, тред ОС они точно не блочат
ну а с чего тогда инфа что в других япах по-другому?)
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
по крайней мере что во всех других япах по-другому*
источник