Size: a a a

2021 March 14

ΑZ

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

ΑZ

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

ΑZ

Αλεχ Zhukovsky in rust_offtopic
а без авейтов убрал вызов горутины ReallyLong - и привет
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
но про твои кулстори - могу только посочувстввоать
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
с мвц и EF/dapper у меня никаких проблем в жизни не было
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
все запросы асинхронные, все работало хорошо
источник

p

polunin.ai in rust_offtopic
Αλεχ Zhukovsky
причем как раз явные авейты не дадут тебе убрать асинк там где он был и сделать синхронной - у тебя код не скомпилитс
В расте скомпилируется)
источник

p

polunin.ai in rust_offtopic
В Хаскеле не скомпилируется да
источник

p

polunin.ai in rust_offtopic
Короче обсуждаемая тема это просто выбор в сторону одних плюсов перед другими плюсами
источник

p

polunin.ai in rust_offtopic
Но кмк явность всегда лучше неявности🤷‍♀
источник

МП

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

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

МП

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

MB

Mikail Bagishov in rust_offtopic
Но и раст не заставляет спавнить каждый вызов асинхронной функции
источник

МП

Мимо Проходящий... in rust_offtopic
Мимо Проходящий
то есть в го ты просто делаешь функцию как есть, не пытаясь сделать её "асинхронной", а уж как её вызывать - ответственность  вызывающего кода, а не кода функции. Может быть уместно её синхронно вызвать, даже не смотря на то что она долгая. Не всегда же под каждый вызов отдельный тред создавать
а если требуется залочить память - тупо лочишь без всяких сомнений и без всяких фреймворков на акторах, это НИКОГДА не обвалит программу и не наспавнит тредов ОС как в коде на асин эвейтах
источник

SP

Stanislav Popov in rust_offtopic
источник

MB

Mikail Bagishov in rust_offtopic
Мимо Проходящий
а если требуется залочить память - тупо лочишь без всяких сомнений и без всяких фреймворков на акторах, это НИКОГДА не обвалит программу и не наспавнит тредов ОС как в коде на асин эвейтах
Код на асинк-авейтах спавнит фиксированный тредпул, разгребающий все эти футуры.
источник

MB

Mikail Bagishov in rust_offtopic
Системные потоки создаются при использовании spawn_blocking, но в идеальной ситуации он не используется
источник

MB

Mikail Bagishov in rust_offtopic
(запасаюсь попкорном и жду io_uring)
источник

МП

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

MB

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