Size: a a a

2021 March 14

MB

Mikail Bagishov in rust_offtopic
Или я неправильно понимаю предназначение GOMAXPROCS?
источник

MB

Mikail Bagishov in rust_offtopic
О, кстати: There is no limit to the number of threads that can be blocked in system calls on behalf of Go code; those do not count against the GOMAXPROCS limit.
источник

MB

Mikail Bagishov in rust_offtopic
Ну то есть блокирующие операции как с токио, так и в го могут наспавнить овердохрена тредов
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
polunin.ai
В расте скомпилируется)
если ты уберешь impl Future то нихуя не скомпилится
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Мимо Проходящий
так эвейты же гарантирут только то, что функция задекларирована как асинхронная. Является ли она асинхронной по факту, эвейты не проверяют, вот в чём загвоздка. И ошибиться в этим достаточно легко, а ревьюить проблемно.

"все запросы асинхронные, все работало хорошо" - это всё понятно, тут же вопрос 1) как это скейлится на сложность 2) сколько обвязки требуется для асинхронных вызовов (по мне так дофига) 3) как при этом сделать shm DS без боли. В обычных кейсах одновремнно запущенные 100 потоков ос - вообще не проблема например, ни кто даже разбираться с этим не будет. А если это хайлоад, или хотя бы просто достаточно нагруженный сервис? или в амазоне работает, где ты цпу башляешь не хило? вот ты уверен например что твоя программа с асинк ревестами будет на 4х ядерном воркере работать в основном в 4 ядра? У меня на сишарпе проблема была не в том, что программа не работала вообще, а в том, что её оптимизация для конкурентных кейсов превращалась в ад
ну а это уже принцип наименьшего удивления
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
у тебя может быть функция задекларированная как возврщающая ошибку но при этом всегда ворвзащается result, nil - тоже же не валидируется?
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
асинхронная функция в шарпе которая делает что-то тяжелое - это редкость, в нормальных либ я такого вообще не видел
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
ну то есть пройтись мейнстриму: жсон.нет, еф, мвц, автофак ккой-нибудь - нигде там такого не найдешь.

В либах с 3 звездами на гитхабе - возможны варианты
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Мимо Проходящий
так эвейты же гарантирут только то, что функция задекларирована как асинхронная. Является ли она асинхронной по факту, эвейты не проверяют, вот в чём загвоздка. И ошибиться в этим достаточно легко, а ревьюить проблемно.

"все запросы асинхронные, все работало хорошо" - это всё понятно, тут же вопрос 1) как это скейлится на сложность 2) сколько обвязки требуется для асинхронных вызовов (по мне так дофига) 3) как при этом сделать shm DS без боли. В обычных кейсах одновремнно запущенные 100 потоков ос - вообще не проблема например, ни кто даже разбираться с этим не будет. А если это хайлоад, или хотя бы просто достаточно нагруженный сервис? или в амазоне работает, где ты цпу башляешь не хило? вот ты уверен например что твоя программа с асинк ревестами будет на 4х ядерном воркере работать в основном в 4 ядра? У меня на сишарпе проблема была не в том, что программа не работала вообще, а в том, что её оптимизация для конкурентных кейсов превращалась в ад
> У меня на сишарпе проблема была не в том, что программа не работала вообще, а в том, что её оптимизация для конкурентных кейсов превращалась в ад

Хз, так же как и у всех. Если есть замороченные требования к выполнению - у сидристого был неплохой доклад на тему как сделать свой шедулер и все что хочешь на нем вертеть https://youtu.be/bHX7lwttrCA
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Мимо Проходящий
то есть в го ты просто делаешь функцию как есть, не пытаясь сделать её "асинхронной", а уж как её вызывать - ответственность  вызывающего кода, а не кода функции. Может быть уместно её синхронно вызвать, даже не смотря на то что она долгая. Не всегда же под каждый вызов отдельный тред создавать
ну в расте делаешь tokio::spawn_blocking точно так же и оно оффлоадит выполнение куда-то. А можешь вызывать напрямую.
источник

DS

Doge Shibu in rust_offtopic
Αλεχ Zhukovsky
> У меня на сишарпе проблема была не в том, что программа не работала вообще, а в том, что её оптимизация для конкурентных кейсов превращалась в ад

Хз, так же как и у всех. Если есть замороченные требования к выполнению - у сидристого был неплохой доклад на тему как сделать свой шедулер и все что хочешь на нем вертеть https://youtu.be/bHX7lwttrCA
Ну отдельные тредпулы для задач разных типов - это вполне себе легко на каких-нибудь котах/zio в той же скале, можно к тому же эти факты ещё и в системе типов отразить тем же FT
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Мимо Проходящий
в расте та же история - тред пул это уже само по себе плохо, одновременная работа ОС тредов в кол-ве большем, яем ядер на воркере, нафиг не нужна.
Я мало кода на расте писал и всех тонкостей не знаю как там эти проблемы обходят. Я встречал мютексы с асинхронной блокировкой, хз как это работает по факту, но сомневаюсь что так же хорошо как го (крупный вендор vs пара опенсорцных энтузиастов).
В любом случае раст не подходит для типичных задач бизнеса и командной разработки - он слишком низкоуровневый, много бойлерплейта на borrowing который ни кому не нужен. В качестве альтернативы плюсам - наверное ок
> В любом случае раст не подходит для типичных задач бизнеса и командной разработки - он слишком низкоуровневый, много бойлерплейта на borrowing который ни кому не нужен. В качестве альтернативы плюсам - наверное ок

А вот почему го с растом сравнивают - большая загадка. Один - легковесный фреймворк для команды "Гуглеров которые не ресерчеры", другое - низкоуровневая наркомания для тех кто не хочет 15 лет в плюсы инвестировать чтобы начать без уб писать
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Doge Shibu
Ну отдельные тредпулы для задач разных типов - это вполне себе легко на каких-нибудь котах/zio в той же скале, можно к тому же эти факты ещё и в системе типов отразить тем же FT
мы щас что-то более мейнстримное сравниваем. То что в скале все збс и идеально никто не спорит
источник

DS

Doge Shibu in rust_offtopic
Αλεχ Zhukovsky
мы щас что-то более мейнстримное сравниваем. То что в скале все збс и идеально никто не спорит
Я бы не сказал, что прям всё идеально, но конкретно разделение IO подобных типов по разным тредпулам - это элементарно.
источник

p

polunin.ai in rust_offtopic
Αλεχ Zhukovsky
если ты уберешь impl Future то нихуя не скомпилится
че
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
async fn foo() -> i32 { 42 }

#[tokio::main]
async fn main() {
 let answer_to_everything = foo().await;

 println!("Answer is {}", answer_to_everything)
}

Если ты уберешь асинк то код перестанет компилится
источник

p

polunin.ai in rust_offtopic
Αλεχ Zhukovsky
async fn foo() -> i32 { 42 }

#[tokio::main]
async fn main() {
 let answer_to_everything = foo().await;

 println!("Answer is {}", answer_to_everything)
}

Если ты уберешь асинк то код перестанет компилится
а если await то нет
источник

МП

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

ΑZ

Αλεχ Zhukovsky in rust_offtopic
polunin.ai
а если await то нет
тогда у тебя Must_use залупится
источник

p

polunin.ai in rust_offtopic
Αλεχ Zhukovsky
тогда у тебя Must_use залупится
это просто линт
источник