Size: a a a

2021 January 07

RP

Roman Proskuryakov in Rust Async
Fortunato
Ага. Т.е. полностью аналогично коду бед асинк/эвейт. Но зачем тогда...
ну практически аналогично. затем, что ты написал код, который не параллелится
источник

D

Denis in Rust Async
Fortunato
Ага. Т.е. полностью аналогично коду бед асинк/эвейт. Но зачем тогда...
когда у тебя какая-то таска "прервалась", то какая-то другая таска может совершать полезную работу
источник

D

Denis in Rust Async
с синхронным кодом это не работает
источник

F

Fortunato in Rust Async
Denis
вообще не аналогично
С точки зрения последовательности вызовов, я имею в виду. Каждая последующая строка строго после завершения работы предыдущей, никакого выигрыша во времени от асинка нет
источник

RP

Roman Proskuryakov in Rust Async
)))) верно, нет
источник

RP

Roman Proskuryakov in Rust Async
но!
источник

D

Denis in Rust Async
Fortunato
С точки зрения последовательности вызовов, я имею в виду. Каждая последующая строка строго после завершения работы предыдущей, никакого выигрыша во времени от асинка нет
есть, у тебя одновременно может работать множество тасок, причём даже на одном-единственном потоке/ядре
источник

F

Fortunato in Rust Async
Denis
есть, у тебя одновременно может работать множество тасок, причём даже на одном-единственном потоке/ядре
Мне чо-т кажется, это неприменимо к коду, что я скинул выше
источник

RP

Roman Proskuryakov in Rust Async
вот если бы у тебя learn_song или sing_song были какими-нибудь тяжеловесными задачами, которые спавнились в тругом потоке, то... было бы хорошо, потому что в момент засыпания на .await можно переключиться на другую задачу
источник

D

Denis in Rust Async
Fortunato
Мне чо-т кажется, это неприменимо к коду, что я скинул выше
это зависит от имплементации learn_song и sing_song
источник

RP

Roman Proskuryakov in Rust Async
и поток, на котором ты заснул, может быть переиспользован для другой задачи
источник

RP

Roman Proskuryakov in Rust Async
в отличие от синхронного кода, который жрет ресурсы, ожидая выполнения этих синхронных задач
источник

RP

Roman Proskuryakov in Rust Async
короче смотри на это несколько с другой стороны: представь, что у тебя есть ЦПУ с одним ядром без гипертрединга, у тебя есть только 1 тред. а теперь подумай как ты можешь с таким железом обрабатывать 1к соединений параллельно?
источник

F

Fortunato in Rust Async
... Никак?
источник

RP

Roman Proskuryakov in Rust Async
вот async/await позволяет это делать
источник

F

Fortunato in Rust Async
Окей, тут немножко запутались в слове "параллельно", но я понял, что ты имеешь в виду
источник

RP

Roman Proskuryakov in Rust Async
ага, конкурентно*
источник

F

Fortunato in Rust Async
Но всё ещё не понимаю, как async/await позволяет это сделать, если await приостанавливает выполнение текущей функции
источник

RP

Roman Proskuryakov in Rust Async
верно. приостановилась текущая функция, можно переключиться на другую функцию
источник

F

Fortunato in Rust Async
Fortunato
Но всё ещё не понимаю, как async/await позволяет это сделать, если await приостанавливает выполнение текущей функции
Т.е. где-то уровнем (по стеку вызовов) выше должен быть не await, а какая-то штука, запускающая футуры конкурентно?
источник