0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 30
1

Асинхронное vs. Многопоточное программирование

23.08.2016, 12:30. Показов 9376. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Изучая темы многопоточности и асинхронного программирования, у меня возник вопрос. В чем разница вызвать метод асинхронно или в отдельном потоке?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2016, 12:30
Ответы с готовыми решениями:

Асинхронное программирование.
Хотелось бы узнать в чем разница, ознакомился с 2умя способами асинхронного программирования: 1)...

Асинхронное программирование, await, async
Здравствуйте, нужна помощь с этим методом. Мне надо создать бота для Telegram что бы он отправлял...

Асинхронное программирование, Async и Await
нужно сделать программу, которая в отдельном методе заполняет массив случайными числами. Пока...

Синхронное и асинхронное программирование. Парадокс терминологии
Я очень удивлен как называют вещи в программировании не своими именами. Сейчас интересуюсь...

6
Эксперт .NET
17215 / 12669 / 3321
Регистрация: 17.09.2011
Сообщений: 20,941
23.08.2016, 12:41 2
Цитата Сообщение от denprised Посмотреть сообщение
В чем разница вызвать метод асинхронно или в отдельном потоке?
Извините, что ссылкой: Вызов с await блокирует вызывающий поток

Вкратце: при параллельном выполнении обе задачи отрабатывают одновременно.
При асинхронном выполнении задачи разбиваются на части и отдельные куски выполняются либо параллельно в разных потоках, либо последовательно в одном потоке. Наглядный пример — работа графического интерфейса в Windows, где всякие мышки-анимашки, казалось бы, работают одновременно, но на самом деле в одном потоке (в пределах приложения).
0
5140 / 2753 / 464
Регистрация: 05.10.2013
Сообщений: 7,269
Записей в блоге: 143
25.08.2016, 11:47 3
Асинхронное vs. Многопоточное программирование
По-моему, асинхронное программирование это когда вы создаёте методы обратного вызова, которые будут вызваны из параллельно запущенных потоков. Допустим, у вас приложение, которое при нажатии на кнопку параллельно запускает поток, а основной поток продолжает работать. Когда параллельный поток закончит работать, то он может асинхронно вызвать код основного потока. Я думаю, что асинхронное программирование является многопоточным. Поправьте если я не прав.
0
Эксперт .NET
17215 / 12669 / 3321
Регистрация: 17.09.2011
Сообщений: 20,941
25.08.2016, 14:16 4
8Observer8, асинхронное программирование — это когда некую задачу можно завершить когда-нибудь потом, а пока продолжать делать свое дело.
Как это реализовано: через методы обратного вызова, через очередь сообщений или как-то еще — это всего лишь деталь реализации.
Многопоточность — это частный случай асинхронности, но вовсе не обязательный критерий ее наличия.

Посмотрите на то, как организована очередь сообщений в Windows Forms, например. Там самая настоящая асинхронность, но выполняется всегда в одном и том же потоке и без методов обратного вызова.

Пример асинхронности в винформах приводил тут: Чем синхронные операции отличаются от асинхронных?
1
5140 / 2753 / 464
Регистрация: 05.10.2013
Сообщений: 7,269
Записей в блоге: 143
25.08.2016, 14:50 5
Вот к примеру механизм await/async - это и многопоточность и асинхронность? Ведь этот механизм преобразуется в ассинхронные методы обратного вызова, а сами операции запускаются во многих потоках? Я где-то читал и понял, что код после await автоматически переносится в метод обратного вызова, а сама асинхронная операция начинает выполняться в другом потоке.
0
Master of Orion
Эксперт .NET
6094 / 4950 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.08.2016, 17:27 6
8Observer8, Не обязательно. Настоятельно рекомендую к прочтению, в некотором смысла очень кратко описан весь дзен async/await и асинхронного программирования в целом.

Добавлено через 1 минуту
Цитата Сообщение от 8Observer8 Посмотреть сообщение
сама асинхронная операция начинает выполняться в другом потоке
Во-первых нужно помнить, что поток != контекст. Иногда это одно и то же (WPF/WinForms), иногда - нет (WCF/ASP.Net), так что не надо их путать, в общем случае контекст может разделяться многими потоками.
Во-вторых выполнение continuation'а возможно как в другом, так и в том же контексте, в зависимости от ConfigureAwait.
1
Эксперт .NET
17215 / 12669 / 3321
Регистрация: 17.09.2011
Сообщений: 20,941
25.08.2016, 17:36 7
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вот к примеру механизм await/async - это и многопоточность и асинхронность?
Это в первую очередь асинхронность.
Многопоточность ли — это зависит исключительно от реализации асинхронного метода.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Ведь этот механизм преобразуется в ассинхронные методы обратного вызова, а сами операции запускаются во многих потоках?
Механизм преобразуется в конечный автомат, в котором проверяется наличие результата и выполняется продолжающее действие.
Наличие отдельного потока там не требуется.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
а сама асинхронная операция начинает выполняться в другом потоке.
Не обязательно
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2016, 17:36
Помогаю со студенческими работами здесь

Асинхронное программирование. Не происходит соединение клиента с сервером
Что я не так делаю ? Вот клиент : using System; using System.Text; using System.IO; using...

Многопоточное программирование
Здравствуйте, читал литературу по C# с целью разобраться как сделать многопоточную программу, но...

Многопоточное программирование
Программа выполняется в одном потоке. Есть три обработчика событий. Как сделать так, чтобы каждый...

Что такое многопоточное программирование?
Здравствуйте, а можете пожалуйста объяснить чайнику что такое многопоточное программирование, если...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru