|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
Везде твердят что асинхронные операции это не многопоточность. Ну ок. А что будет если скрестить ежа с ужом? К примеру мне нужно скачать 100500 страниц из интернета. Я запускаю 100500 тасков и радуюсь жизни. Но что будет если в тасках я буду использовать не request.GetResponse() а request.GetResponseAsync() ? Даст это какойто проит? Например освободит на время сетевых ожиданий поток из пула для запуска другого таска, или все это ерунда, и этот асинк сам займет еще поток пула для себя? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 22:39 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlВезде твердят что асинхронные операции это не многопоточность. Это может быть многопоточность, а может быть и нет. iskatelsqlНапример освободит на время сетевых ожиданий поток из пула для запуска другого таска, или все это ерунда, и этот асинк сам займет еще поток пула для себя? Да, именно так примерно и будет. Поток, вызвавший операцию I/O не будет простаивать и ждать когда она завершится, а вернется в пул потоков, а когда операция I/O завершится, то из пула будет взят свободный поток и продолжит выполнение дальше по коду. Увеличивается паралельность кода. Рпаилизовано это с помошью системной штуки "I/O completion port" (виндовый аналог select/poll в юниксах). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:02 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlВезде твердят что асинхронные операции это не многопоточность. Вы хотели сказать: не равно, не тоже самое. Т.е. вы что-то прочитали, упустили важную часть и теперь из-за этого возникло куча вопросов? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:05 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsql, Вот объяснение с картинками: https://codewala.net/2015/07/29/concurrency-vs-multi-threading-vs-asynchronous-programming-explained/ ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:07 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
fkthatДа, именно так примерно и будет. Ну ешкин кот, в вопросе или - или, ты отвечаешь "да". В блондинку перекрасился? :) hVostt, Да мы уже столько прочитали от разных авторов, что уже не только непонятно, но еще даже из "я" мы превратились в "мы" одна личность верит одному - другая другому... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:11 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
hVosttiskatelsql, Вот объяснение с картинками: https://codewala.net/2015/07/29/concurrency-vs-multi-threading-vs-asynchronous-programming-explained/ Я не читаю инглишь с листа, но пробежавшись понял, что там про асинхронность с основного потока, я же задаю вопрос - есть ли суть использовать асинхронность в тасках, которые уже больше ничего не делают кроме скачивания самих страниц. Т.е. единственное чем это может помочь - это внутренний механизм GetResponseAsync , который как-то освободит поток пула на время ожидания ответа сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:23 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlЯ не читаю инглишь с листа, но пробежавшись понял, что там про асинхронность с основного потока, я же задаю вопрос - есть ли суть использовать асинхронность в тасках, которые уже больше ничего не делают кроме скачивания самих страниц. Т.е. единственное чем это может помочь - это внутренний механизм GetResponseAsync , который как-то освободит поток пула на время ожидания ответа сервера. Конечно, запрос по сети это io операция, нет смысла ожидать её в потоке, занимая ценный ресурс. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:25 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlДа мы уже столько прочитали от разных авторов, что уже не только непонятно, но еще даже из "я" мы превратились в "мы" одна личность верит одному - другая другому... Вы хотите поговорить об этом? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:27 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlНу ешкин кот, в вопросе или - или, ты отвечаешь "да". В блондинку перекрасился? :) Я блондин Правда, уже потихоньку седеть начал по возрасту. Объясняю по-другому. Есть Task. Это такая штука, которая сразу, без блокировки и ожидания возвращается из метода и просто гарантирует, что когда-нибудь она завершится (успехом или факапом, или отменой по запросу). Под капотом у этой Task может быть все что угодно - это может быть параллельный поток, может быть асинхронная операция, может быть вообще ожидание какого-нибудь события (нажатия кнопки, истечения срока таймера и т.п.), а может даже вообще ничего и не быть (т.е. таск выполняется синхронно в том же потоке и возвращается уже сразу завершенным). В твоем примере речь идет об асинхронном вызове (асинхронный I/O), как это работает в этом случае (т.е. что там у таска под капотом) я выше пояснил. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:33 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
hVosttВы хотите поговорить об этом? :) Хочу. Если меня называют на вы, значит мы уже двинулись... Еще вопрос про пул - я явно понял что мин нужно сразу поднимать (для интернетов), ибо он изначально у меня 8 и раскачивается постепенно. Только пока он раскачивается вся программа бы уже выполнилась... Вот как быть с макс? резать его стремно, хз что еще в этом пуле, но кол-во обращений к серверу хотелось бы ограничить. Странная умная штуковина Task, с которой хрен поймешь как быть, старый добрый Thread проще и понятнее. Но надо ведь учиться новому :( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:37 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlстарый добрый Thread проще и понятнее. Ага. Особенно когда натыкаешься на говнокод в веб-приложении, который отжирает весь пул, или, еще хуже, плодит 1000+ кастомных потоков через CreateThread. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:42 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
fkthat, я доморощенный программер, мне до веб далеко. но создать 100 потоков и кормить их через blockingcollection например, для меня понятней чем понять как управлять табуном тасков. Пока что нашел для себя что если пул с минимума сразу поднять, то таски вроде работают... Хотя в чем их прелесть так и не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:51 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlХочу. Если меня называют на вы, значит мы уже двинулись... Остались люди, и много, которые считают обращение на "ты" фамильярностью. Дикость, но что поделаешь, не готов ещё мир к этому :) iskatelsqlЕще вопрос про пул - я явно понял что мин нужно сразу поднимать (для интернетов), ибо он изначально у меня 8 и раскачивается постепенно. Только пока он раскачивается вся программа бы уже выполнилась... Вот как быть с макс? резать его стремно, хз что еще в этом пуле, но кол-во обращений к серверу хотелось бы ограничить. Странная умная штуковина Task, с которой хрен поймешь как быть, старый добрый Thread проще и понятнее. Но надо ведь учиться новому :( Если хочется единственного ультимативного решения, его нет. Давайте исходить из конкретных задач, а не переворачиванием сферического коня в вакууме. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 00:13 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsqlfkthat, я доморощенный программер, мне до веб далеко. но создать 100 потоков и кормить их через blockingcollection например, для меня понятней чем понять как управлять табуном тасков. Пока что нашел для себя что если пул с минимума сразу поднять, то таски вроде работают... Хотя в чем их прелесть так и не понял. Что может быть проще: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Если серьёзно, то прелестей у тасков много. Например, таск может возвращать результат. Для тасков есть унифицированный механизм отмены. Для тасков есть всякие утилиты как ContinueWith, WhenAny, WhenAll и т.д. Для тасков есть паттерн async/await Для тасков есть TPL. И т.д. и т.п. И опять-таки, в десятый раз - таски это вовсе не только многопоточность. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 00:18 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
fkthatИ опять-таки, в десятый раз - таски это вовсе не только многопоточность. Ну ОК! таски - круто! Только расскажи как. Мне нужны 100500 страниц с инета. Задаю 100500 тасков, и разгоняются они потихоньку, даж замерял, сначала по 2-3 в секунду, потом больше. Если пулу мин побольше задать то сразу побольше. Как с этими тасками да с инетом? задача скачать быстро 100500 страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 00:51 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsql, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 02:59 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsql, Выше был пример с параллельностью, но без асинхронного I/O. С асинхронным I/O будет самую малость хитрее: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 03:40 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
iskatelsql, Кроме потоков есть ещё ограничение на количество одновременно открытых соединений. И оно отнюдь не бесконечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 17:31 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
hVosttКроме потоков есть ещё ограничение на количество одновременно открытых соединений. И оно отнюдь не бесконечно. Ну, я выше как раз аж целых два примера привел, как кол-во одновременных тасков ограничить. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 17:38 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
fkthathVosttКроме потоков есть ещё ограничение на количество одновременно открытых соединений. И оно отнюдь не бесконечно. Ну, я выше как раз аж целых два примера привел, как кол-во одновременных тасков ограничить. Мне кажется лучше всего тут подойдёт DataFlow, вообще для задачи выкачивания. Там и асинк из коробки и дросселирование... А ещё можно увеличить количество соединений, но не до бесконечности опять же :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 17:46 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
hVosttМне кажется лучше всего тут подойдёт DataFlow, вообще для задачи выкачивания. Да, сейчас мельком глянул - надо будет присмотреться, что за зверь такой - раньше его как-то не замечал. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 18:10 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
fkthatiskatelsql, Выше был пример с параллельностью, но без асинхронного I/O. С асинхронным I/O будет самую малость хитрее: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
будет на индекс оф ранже падать. а так прикольно, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 18:13 |
|
Вопрос про async и task
|
|||
---|---|---|---|
#18+
hVosttи дросселирование... это что такое? какие-то смутные ассоциации с дросселями из электротехники... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 18:16 |
|
|
start [/forum/topic.php?fid=20&fpage=15&tid=1398748]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 235ms |
total: | 404ms |
0 / 0 |