|
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
|
Разница между асинхронным, многопоточным и параллельным программированиями30.07.2021, 10:26. Показов 12996. Ответов 14
Всем привет! Собственно вопрос обозначен в загаловке темы. Могу лишь уточнить, что не понятно.
Я понимаю, что асинхронное программирование, это когда код вызывается отдельно от другого кода и "идет/читается" асинхронно с другим, но в чем разница между многопоточным и параллельным тогда? Разве они не дают ту же возможность? Смотрел видео про асинхронное программирование, так там человек сказал, что потоки и асинки это одно и то же, только асинки проще, правда-ли это? Зачем и когда нужно применять три этих приема программирования?
0
|
|
| 30.07.2021, 10:26 | |
|
Ответы с готовыми решениями:
14
В чем разница между созданием асинхронных методов веб-службы и асинхронным вызовом синхронного метода веб-службы синтез четырехразрядного счетчика с параллельным переносом между разрядами |
|
1124 / 656 / 393
Регистрация: 28.01.2021
Сообщений: 1,336
|
|
| 30.07.2021, 10:29 | |
Сообщение было отмечено cinekst_207 как решение
Решение
1. Параллельное исполнение подразумевает наличие более одного вычислительного устройства (например, процессора), которые будут одновременно выполнять несколько задач.
2. Асинхронность подразумевает, что операция может быть выполнена кем-то на стороне: удаленным веб-узлом, сервером или другим устройством за пределами текущего вычислительного устройства. 3. Многопоточное программирование подразумевает, что код приложения выполняется в разных потоках. Например, есть главный поток UI, и несколько рабочих потоков, которые выполняют тяжелые вычисления, результаты которых затем выводятся на UI.
7
|
|
|
7 / 7 / 5
Регистрация: 25.03.2018
Сообщений: 377
|
|
| 31.07.2021, 22:15 [ТС] | |
|
esperanto_qun, и все же, я видел, что делают TCP Socket через thread или через async. И в чем разница? По сути одно и то же.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 31.07.2021, 23:03 | |
|
cinekst_207, потоки - это частный случай асинхронности, паралеллизм - частный случай многопоточности.
Многопоточность на одноядерном ЦП - та же асинхронность.
2
|
|
|
|
||||||||
| 01.08.2021, 02:03 | ||||||||
1
|
||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 01.08.2021, 03:25 | ||
|
Или вы не то процитировали? Многопоточность на одноядерном ЦП — типичная асинхронность, при которой планировщик ОС разбивает инструкции разных процессов/потоков на мелкие задачи и отдает на выполнение ЦП. Если вы одновременно убираетесь дома, готовите ужин и отвечаете на форуме, переключаясь от одного к другому, то вы эти задачи выполняете асинхронно, хоть "поток" и один — вы.
1
|
||
|
|
||
| 01.08.2021, 15:25 | ||
|
-- да, действительно "многопоточность", как и "многозадачность" на ЦПУ на самом деле смахивает на асинхронность в том плане что потоков/задач значительно больше чем ядер и просто программе выделяется небольшой промежуток времени, чтобы она выполнила сколько успеет (либо сказала что пока выполнять нечего и время "списывается" для других задач) -- речь все же идет про программировании на C#, и в отрыве от вакуумных коней формы шара, создать 100500 Thread и навесить на них задачу скажем выполнить запрос к sql, либо слушать TCP Socket -- менее эффективно, нежели использовать async-await. Пример выше я скидывал, если он ошибочный -- готов выслушать замечания. Вообще я бы cinekst_207, посоветовал не слушать тут умные ответы, а написать десяток-другой прототив, выполняющих те или иные действия, в идеале перед этим разобраться с такой возможностью VS как многопоточная отладка. И замерить, что будет быстрее: -- создать 1000 Thread или через Task.Run, чтобы понять что создание нового потока -- очень дорогое удовольствие и зачем нужен TaskPool. -- насколько быстро запустятся через Task.Run первые 4 задачи, и как быстро будут стартовать последующие. Также можно поиграться с настройками пула, чтобы увидеть насколько "активней" будет создаваться новая задача при увеличении нижнего лимита, и поможет ли это выполнить быстрее все 1000 задач. -- можно еще ограничить верхний лимит пула, попытаться его выбрать и посмотреть что произойдет с ожиданием callback для методов Begin после этого. -- создать 1000 потоков, которые тупо ждут, и посмотреть насколько просядет выполнение других задач -- посмотреть, создается ли отдельный поток при асинхронном запросе на внешний ресурс, и опять же проверить что работать будет быстрее: 1000 http запросов через async/Thread/Parallel.ForEach скажем на тот же google Я думаю кто умный (явно не человек из видео, которое вы смотрели), подскажет еще кейсы для разбора многопоточного и асинхроного кода. Просто фраза "Асинхронность подразумевает, что операция может быть выполнена кем-то на стороне" вроде как и не ошибочная, но пока лапками не пощупаешь что оно такое и с чем едят -- большая вероятность что понимания не будет. Я тоже сначала думал "та асинхроность -- это просто сахар над многопоточностью", хотя это далеко не так.
2
|
||
|
Модератор
|
|||
| 07.08.2021, 10:35 | |||
|
А в чём разница? async-await - это такое же выполнение на другом потоке только без явного его создания (используется пул потоков). И с ожиданием выполнения задачи. Вообще сравнивать Theard с async-await - некорректно. Первое - это про выполнение в другом потоке. Второе - это про ожидание результата выполнения. Более-менее можно сравнивать Theard с Task. Добавлено через 16 минут Если не нужно ни того ни другого, то, скорее всего, и async-await не нужны. Thead был изначально в .Net. Но пользоваться им было неудобно. Да и создание нового потока под каждый вызов метода довольно затратно. В Framework 4 добавили пул потоков и, соответственно, различные методы работы с ним. Для выполнения метода на пуле нужен Таск. async-await служат для реализации методов в которых надо ожидать выполнения Тасков, но сами по себе они к асинхронности не имеют отношения. Они только облегчают её использование. При этом при правильной реализации освобождение потоков должно происходить по глубине всей цепочки вызовов, что бы "не подвешивать", в том числе, и потоки пула. Не все .Net методы реализуют эту концепцию async-await (с освобождением вызывающего потока). Допустим, файловые асинхронные методы удерживают поток пула до завершения операции. Такое же может происходить и при работе с сокетами. В этом случае, если ОООООЧень много запросов выполняется одновременно, то могут закончится свободные потоки пула. И реализация использующая явное создание Theard может оказаться более масштабируемой.
1
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||
| 07.08.2021, 12:34 | ||||||||
![]() Все асинхронные методы в .NET, работающие с I/O, не блокируют потоки — в этом вся суть асинхронности — не блокировать потоки.
3
|
||||||||
|
Модератор
|
|||||||||
| 07.08.2021, 13:35 | |||||||||
|
Понятно, что это по сути несравнимые вещи. Но в коде поста #5 предлагается сравнить ВЫПОЛНЕНИЕ обычного МЕТОДА в новом потоке, и выполнение асинхронного метода в задаче. Я думал его ввели одновременно с Тасками. Наверное, я криво выражаюсь, но имел ввиду такую разницу.
Где-то в разделе должна быть эта тема - надо поискать.
0
|
|||||||||
|
|
|||
| 07.08.2021, 19:19 | |||
|
Добавлено через 2 минуты
0
|
|||
|
Модератор
|
|||
| 07.08.2021, 19:42 | |||
|
Но вопрос же был о принципиальной разнице между потоками и асинхронностью. На примере этого кода такая разница не была продемонстрирована.
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 07.08.2021, 19:48 | ||||
|
0
|
||||
|
Модератор
|
||
| 07.08.2021, 20:34 | ||
|
Я приводил его в противопоставлении с Thread.Sleep(). В теме, по указанной выше ссылке, у меня сложилось впечатление, что файловые операции удерживают (исполняющий, а не вызывающий) поток до завершения операции. Хотя не спорю, что, возможно, там мы что0то не то набедокурили. Если не трудно и есть время - посмотрите.
0
|
||
|
|
||
| 07.08.2021, 21:17 | ||
|
Мне сейчас еще раз копать не хочется, могу только сказать что еще дополнительно тестировал как быстрее всего загрузить 100500 файлов с IIS. Вариант с неблокирующими тасками был найболее результативным.
0
|
||
| 07.08.2021, 21:17 | |
|
Помогаю со студенческими работами здесь
15
Какая разница между различными сокетами (например, между 775 и 1155)? Стоит ли делать клиент многопоточным? Проблема с многопоточным вызовом функции
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|