0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 30
|
|
1 | |
Асинхронное vs. Многопоточное программирование23.08.2016, 12:30. Показов 9376. Ответов 6
Метки нет Все метки)
(
Здравствуйте. Изучая темы многопоточности и асинхронного программирования, у меня возник вопрос. В чем разница вызвать метод асинхронно или в отдельном потоке?
0
|
|
23.08.2016, 12:30 | |
Ответы с готовыми решениями:
6
Асинхронное программирование.
|
![]() 17215 / 12669 / 3321
Регистрация: 17.09.2011
Сообщений: 20,941
|
|
23.08.2016, 12:41 | 2 |
Извините, что ссылкой: Вызов с await блокирует вызывающий поток
Вкратце: при параллельном выполнении обе задачи отрабатывают одновременно. При асинхронном выполнении задачи разбиваются на части и отдельные куски выполняются либо параллельно в разных потоках, либо последовательно в одном потоке. Наглядный пример — работа графического интерфейса в Windows, где всякие мышки-анимашки, казалось бы, работают одновременно, но на самом деле в одном потоке (в пределах приложения).
0
|
25.08.2016, 11:47 | 3 |
0
|
![]() 17215 / 12669 / 3321
Регистрация: 17.09.2011
Сообщений: 20,941
|
|
25.08.2016, 14:16 | 4 |
8Observer8, асинхронное программирование — это когда некую задачу можно завершить когда-нибудь потом, а пока продолжать делать свое дело.
Как это реализовано: через методы обратного вызова, через очередь сообщений или как-то еще — это всего лишь деталь реализации. Многопоточность — это частный случай асинхронности, но вовсе не обязательный критерий ее наличия. Посмотрите на то, как организована очередь сообщений в Windows Forms, например. Там самая настоящая асинхронность, но выполняется всегда в одном и том же потоке и без методов обратного вызова. Пример асинхронности в винформах приводил тут: Чем синхронные операции отличаются от асинхронных?
1
|
25.08.2016, 14:50 | 5 |
Вот к примеру механизм await/async - это и многопоточность и асинхронность? Ведь этот механизм преобразуется в ассинхронные методы обратного вызова, а сами операции запускаются во многих потоках? Я где-то читал и понял, что код после await автоматически переносится в метод обратного вызова, а сама асинхронная операция начинает выполняться в другом потоке.
0
|
Master of Orion
![]() |
|
25.08.2016, 17:27 | 6 |
8Observer8, Не обязательно. Настоятельно рекомендую к прочтению, в некотором смысла очень кратко описан весь дзен async/await и асинхронного программирования в целом.
Добавлено через 1 минуту Во-первых нужно помнить, что поток != контекст. Иногда это одно и то же (WPF/WinForms), иногда - нет (WCF/ASP.Net), так что не надо их путать, в общем случае контекст может разделяться многими потоками. Во-вторых выполнение continuation'а возможно как в другом, так и в том же контексте, в зависимости от ConfigureAwait.
1
|
![]() 17215 / 12669 / 3321
Регистрация: 17.09.2011
Сообщений: 20,941
|
|
25.08.2016, 17:36 | 7 |
Это в первую очередь асинхронность.
Многопоточность ли — это зависит исключительно от реализации асинхронного метода. Механизм преобразуется в конечный автомат, в котором проверяется наличие результата и выполняется продолжающее действие. Наличие отдельного потока там не требуется. Не обязательно
1
|
25.08.2016, 17:36 | |
Помогаю со студенческими работами здесь
7
Асинхронное программирование. Не происходит соединение клиента с сервером Многопоточное программирование Многопоточное программирование Что такое многопоточное программирование? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |