Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/55: Рейтинг темы: голосов - 55, средняя оценка - 4.95
 Аватар для Sirius1989
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 47
.NET 4.x

Асинхронность и многопоточность

03.09.2019, 18:40. Показов 10397. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Меня интересует вопрос, в чём различие асинхронности и многопоточности?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2019, 18:40
Ответы с готовыми решениями:

Многопоточность или асинхронность?
какой метод лучше использовать для создания программы с функционалом типа простой авторизации на сайтах(а также копированием текста с этих...

Чем отличаются асинхронность, многопоточность, многозадачность, параллелизм?
Читаю про Многопоточность и Aсинхронность (последовательно :)) Возник такой вопрос: Если я даю команду что-то выполнить в другом...

Асинхронность, многопоточность и тд
Здравствуйте! Есть NodeJS, подписка на события(приходят по websocket) и много условий if .. else+ функций которые выполняются походу...

14
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
03.09.2019, 18:53
Асинхронность - выполнение задач независимо и без ожидания завершения потоком инициировавшим запуск.
Многопоточность - выполнение двух и более отдельных последовательностей инструкций одновременно в рамках одного процесса.
1
 Аватар для Sirius1989
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 47
03.09.2019, 19:00  [ТС]
nicolas2008, если я правильно понимаю в основе асинхронной модели программирования лежит многопоточность? И если вопрос сформулирован чем отличается асинхронное программирование от многопоточного? Возможно это не совсем корректный вопрос, ну его часто задают на тех же собеседованиях.

Добавлено через 3 минуты
nicolas2008, в любом случае, если мы запускаем метод асинхронно, мы можем указать, чтоб главный поток ожидал выполнения данного метода. Взять даже через элементарный делегат Action, с помощью метода EndIvoke(IDispatcher dis)
0
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1
03.09.2019, 19:09
Цитата Сообщение от Sirius1989 Посмотреть сообщение
если я правильно понимаю в основе асинхронной модели программирования лежит многопоточность?
Не всегда. Можно выполнять асинхронные операции в том же, вызывающем потоке. Но да, так или иначе в основе лежат потоки.
Цитата Сообщение от Sirius1989 Посмотреть сообщение
в любом случае, если мы запускаем метод асинхронно, мы можем указать, чтоб главный поток ожидал выполнения данного метода.
Можно даже синхронно выполнять операцию в другом потоке.
В этом-то и разница.
Во время асинхронной операции, вызывающий поток может выполнить какую-то свою работу во время ожидания завершения этой операции. Что-то типа:
C#
1
2
3
var asyncOperation = DoSomethingAsync();
DoSomeJob();
await asyncOperation;
0
 Аватар для Sirius1989
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 47
03.09.2019, 19:21  [ТС]
Cupko, хорошо. Тогда вопрос можно ли асинхронно выполнять операцию в разных потоках? Вы пишите можно даже синхронно выполнять операцию в другом потоке, вы имеете в виду приостанавливая выполнение основного потока? И вообще как правильно отвечать на вопрос чем отличается асинхронное программирование от многопоточного? Объясните, пожалуйста.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.09.2019, 19:25
Лучший ответ Сообщение было отмечено Sirius1989 как решение

Решение

Добрый день. Недавно обсуждали.
Запуск события из фонового потока для взаимодействия с основным

Многопоточность - это одновременное выполнение кусков программы. Формулировка простая и ясная как топор.
Асинхронность - слишком размытое понятие. Ни один человек в мире не может дать правильную формулировку на 100%.

Вкратце:
Конкурентность = Асинхронность + Многопоточность. Данную аксиому предложили ведущие собаководы (авторы асинхронности)
Конкурентность: любое неблокирующее выполнение кода. С этим вроде все согласились.
Асинхронность в самом узком смысле: неблокирующее выполнение кода в единственном потоке. Когда по принципу Event Loop разнообразные мелкие процедурки ставятся в очередь и последовательно исполняются в цикле.

Асинхронность в широком смысле - это всё, что касается формулировки и философии Task. То есть фьючерсы, пустые обещания и хотелки, которые как известно, надо три года ждать.
А вот в широком смысле, поскольку задачи, асинхронность поглощает в себя многопоточность и становится неотличима от конкурентности.
1
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
03.09.2019, 19:33
Цитата Сообщение от Sirius1989 Посмотреть сообщение
если я правильно понимаю в основе асинхронной модели программирования лежит многопоточность?
Отчасти да.
Но это только один из вариантов реализации асинхронности.
Кроме многопоточности есть еще вариант, когда задача выполняется на периферийном устройстве, например чтение/запись сетевого потока. В этом случае для выполнения асинхронной задачи не нужен отдельный поток.

Цитата Сообщение от Sirius1989 Посмотреть сообщение
И если вопрос сформулирован чем отличается асинхронное программирование от многопоточного? Возможно это не совсем корректный вопрос, ну его часто задают на тех же собеседованиях.
Суть в том чтобы проверить понимание этих концепций исключив возможность того что кандидат будет просто цитировать заученную инфу из учебников, где такое сравнение по понятным причинам не приводится т.к. это понятия чуть-чуть я бы сказал ортогональны.
1
03.09.2019, 19:40

Не по теме:

каждый раз когда задаю сам себе такой вопрос чтобы освежить память мозг выдает Асинхроннсть это когда асинхронно, многопоточность это когда параллельно

0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
03.09.2019, 19:55
Цитата Сообщение от Sirius1989 Посмотреть сообщение
в любом случае, если мы запускаем метод асинхронно, мы можем указать, чтоб главный поток ожидал выполнения данного метода. Взять даже через элементарный делегат Action, с помощью метода EndIvoke(IDispatcher dis)
Хорошее замечание. Хоть использование EndInvoke сразу после BeginInvoke смысла не имеет ввиду блокивания потока, но задача то все равно выполняется асинхронно. Так что определение асинхронности можно сократить до
"выполнение задачи независимо от потока инициировавшего её запуск"
1
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1
03.09.2019, 20:32
Лучший ответ Сообщение было отмечено Sirius1989 как решение

Решение

Цитата Сообщение от Sirius1989 Посмотреть сообщение
И вообще как правильно отвечать на вопрос чем отличается асинхронное программирование от многопоточного? Объясните, пожалуйста.
Да так и отвечайте. Что это не одно и то же. Вам, думаю, проще будет понять, если разберетесь в том, для чего это нужно.

С многопоточностью всё просто. Тут в основе Thread и Thread Pool. Создаете поток и выполняете свой код в другом потоке.

С асинхронностью немного сложнее:
Есть 3 модели асинхронного программирования в .NET:
- Asynchronous programming model - как раз-таки всё что связано с методами BeginSomething(), EndSomething() - самая первая модель, редко где используется.
- Event-based Asynchronous Pattern - модель на событиях. Самый распространненый пример - BackgroundWorker класс.
- Task-based Asynchronous Pattern - таски и async/await.

Task в .NET - это вообще класс представляющий единицу асинхронной операции. Говоря про таски, абстрагируйтесь от потоков. Ибо, не обязательно таска будет выполняться в отдельном потоке.

Для чего нужна асинхронность:
Тут, собственно, 2 применения.
1. Клиентские приложения (WinForms/WPF). Асинхронность используется чтобы не блочить основной UI поток и ваши формы не фризились при выполнении синхронной операции. Тут либо это все основано на Background-потоке, либо на Application.DoEvents(); методе.
2. Серверные приложения (Web, Сокеты). Тут асинхронность нужна для того чтобы освободить поток от ожидания IO-операции. Во время всяких await LongRunningDbSelect(); (а так же доступа к диску, Http-реквестов и т.д.) вызывающий поток возвращается в пул и обрабатывает другого клиента вашего сервера, дабы не тратить потоки на каждого клиента и выполнять несколько операций одновременно.
1
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
03.09.2019, 22:21
истинная асинхронность работает в 2-3 случаях - файлы, сеть, ?? (не скажу даже сходу)
вся остальная асинхронность бессмысленная бесовщина от которой вреда больше чем пользы, просто завуалированные потоки закопанные под тысячей строк кода ради удобства
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
04.09.2019, 00:12
m0nax, как насчет фоновых CPU-bound операций?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
04.09.2019, 07:48
nicolas2008, как насчет фоновых CPU-bound операций в единственном потоке UI ?
"- Ты видишь суслика?
- Нет.
- А он есть."
Фоновые CPU-bound операции в единственном потоке UI - самая что ни на есть старинная классическая асинхронность.

---------
Прекрасная статья о смысле асинхронности, в которой автору удалось в целом разжевать невероятно сложную для понимания тему асинхронности:
https://agladky.ru/blog/async-await-example/

Есть мелкая ошибка, но в целом статья изящна.

Задачи представляют параллельные конкурентные (асинхронные) операции
Могут выполняться на отдельном или разных потоках.
Могут быть скомбинированы и выстроены в цепочку вызовов.
0
 Аватар для Sirius1989
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 47
04.09.2019, 13:48  [ТС]
Цитата Сообщение от Cupko Посмотреть сообщение
С асинхронностью немного сложнее:
Есть 3 модели асинхронного программирования в .NET:
- Asynchronous programming model - как раз-таки всё что связано с методами BeginSomething(), EndSomething() - самая первая модель, редко где используется.
- Event-based Asynchronous Pattern - модель на событиях. Самый распространненый пример - BackgroundWorker класс.
- Task-based Asynchronous Pattern - таски и async/await.
Объясните в чём разница если я метод запущу в таске и если я пропишу метод ключевым словом async и внутри метода у меня будет таск с await и вызову этот метод?
0
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1
04.09.2019, 16:23
Цитата Сообщение от Sirius1989 Посмотреть сообщение
Объясните в чём разница если я метод запущу в таске и если я пропишу метод ключевым словом async и внутри метода у меня будет таск с await и вызову этот метод?
Разница в ожидании результата.
При:
C#
1
Task.Run(DoSomething).Result
Вызывающий поток будет простаивать в ожидании результата операции, а при
C#
1
await Task.Run(DoSomething)
поток, во время выполнения таски, будет обрабатывать события из MessageLoop для клиентских приложений и клиентские реквесты для серверных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.09.2019, 16:23
Помогаю со студенческими работами здесь

Многопоточность, мультипроцессинг и асинхронность на С11
Доброе утро! Как на C11 использовать потоки, процессы и асинхронность на уровне языка? Какая есть на эту тему документация или литература?

Qt. Многопоточность, асинхронность, сеть, сигналы, слоты
Доброго времени суток, друзья. Помогите пожалуйста разобраться со следующими косяками: Суть: есть класс, в котором делается POST...

Асинхронность в js
почему в консоле не находит переменную obj, но когда убираю setTimout, только тогда находит async function regUser() { ...

Асинхронность
Добрый день, у меня такая проблема. Создал поток, запустил его и программа заглючивает, но действие выполняет. Дело в том что сама...

Асинхронность
Всем привет) Я новичек в ноде, разрабатываю веб сервер. this.tokens.get(token, function(msg, that) { if (msg) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru