В чем разница между асинхронным и синхронным выполнением?
Асинхронное и синхронное выполнение, что это значит?
Ответ 1
Когда вы выполняете что-то синхронно, вы ждете его завершения, прежде чем перейти к другой задаче. Когда вы выполняете что-то асинхронно, вы можете перейти к другой задаче до ее завершения.
При этом в контексте компьютеров это означает выполнение процесса или задачи на другом "потоке". Поток представляет собой серию команд (блок кода), которые существуют как единое целое. Операционная система может управлять несколькими потоками и назначать потоку кусок ( "срез" ) процессорного времени перед переключением на другой поток, чтобы дать ему поворот сделать некоторую работу. По своей сути (pardon pun) процессор может просто выполнить команду, у нее нет понятия делать две вещи за один раз. Операционная система имитирует это путем выделения срезов времени для разных потоков.
Теперь, если вы введете несколько комбинаций/процессоров в микс, тогда все может произойти в одно и то же время. Операционная система может выделять время на один поток на первом процессоре, а затем выделять один и тот же блок времени на другой поток на другом процессоре. Все это связано с тем, что операционная система может управлять завершением вашей задачи, пока вы можете продолжать свой код и выполнять другие действия.
Асинхронное программирование - сложная тема из-за семантики того, как все связывается вместе, когда вы можете делать это одновременно. Существует множество статей и книг по этому вопросу; взгляните!
Ответ 2
Синхронный/асинхронный НЕ НУЖНО СДЕЛАТЬ С МНОЖЕСТВЕННОЙ РЕЗЬБОЙ.
Синхронный или Синхронный означает "подключен" или "зависит" каким-то образом. Другими словами, две синхронные задачи должны быть осведомлены друг о друге, и одна задача должна выполняться каким-то образом, которая зависит от другой, например, ждать до начала выполнения другой задачи.
Асинхронный означает, что они полностью независимы и ни один из них не должен рассматривать другого каким-либо образом, либо в начале, либо в процессе исполнения.
Синхронный (один поток):
1 thread -> |<---A---->||<----B---------->||<------C----->|
Синхронный (многопоточный):
thread A -> |<---A---->|
\
thread B ------------> ->|<----B---------->|
\
thread C ----------------------------------> ->|<------C----->|
Асинхронный (один поток):
A-Start ------------------------------------------ A-End
| B-Start -----------------------------------------|--- B-End
| | C-Start ------------------- C-End | |
| | | | | |
V V V V V V
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->|
Асинхронный (многопотоковый):
thread A -> |<---A---->|
thread B -----> |<----B---------->|
thread C ---------> |<------C--------->|
- Начальные и конечные точки задач A, B, C, представленные символами
<
,>
. - Временные срезы процессора, представленные вертикальными столбцами
|
Технически концепция синхронного/асинхронного действительно не имеет ничего общего с потоками. Хотя, в общем, необычно находить асинхронные задачи, запущенные в одном потоке, это возможно (см. Ниже примеры), и обычно бывает, что две или более задачи выполняются синхронно на отдельных потоках... Нет, концепция синхронного/асинхронного должен выполняться только с тем, можно ли инициировать вторую или последующую задачу до того, как другая (первая) задача завершится, или она должна ждать. Вот и все. Какой поток (или потоки), или процессы, или процессоры, или действительно, какое аппаратное обеспечение, задача [s] выполняется, не имеет отношения к делу. Действительно, чтобы сделать это, я отредактировал графику, чтобы показать это.
АСИНХРОННЫЙ ПРИМЕР. При решении многих технических проблем программное обеспечение предназначено для разделения общей проблемы на несколько отдельных задач и последующего выполнения их асинхронно. Хорошими примерами являются инвертирование матрицы или проблема анализа конечных элементов. В вычислениях примером является сортировка списка. Например, процедура быстрой сортировки разбивает список на два списка и сортирует каждый из них, вызывая его рекурсивно. В обоих приведенных выше примерах две задачи могут (и часто выполняются) выполняться асинхронно. Им не нужно быть на отдельных потоках. Даже машина с одним процессором и только один поток исполнения могут быть закодированы, чтобы инициировать обработку второй задачи до того, как первая завершится. Единственным критерием является то, что результаты одной задачи не нужны в качестве вклада в другую задачу. До тех пор, пока время начала и окончания задач перекрывается (возможно только в том случае, если вывод не нужен в качестве входов для другого), они выполняются асинхронно, независимо от того, сколько потоков используется.
СИНХРОННЫЙ ПРИМЕР. Любой процесс, состоящий из нескольких задач, в которых задачи должны выполняться последовательно, но один должен быть выполнен на другом компьютере (выборка и/или обновление данных, получение котировки акций из финансовой службы и т.д.). Если он на отдельной машине находится на отдельном потоке, будь то синхронно или асинхронно.
Ответ 3
Проще говоря:
СИНХРОННЫЕ
Вы находитесь в очереди, чтобы получить билет в кино. Вы не можете получить его, пока все перед вами не получат его, и то же самое относится к людям, стоящим в очереди за вами.
АСИНХРОННОГО
Вы находитесь в ресторане со многими другими людьми. Вы заказываете еду. Другие люди могут также заказать свою еду, им не нужно ждать, пока ваша еда будет приготовлена и подана вам, прежде чем они смогут заказать. В кухне рабочие ресторана постоянно готовят, обслуживают и принимают заказы. Люди будут получать свою еду, как только она будет приготовлена.
Ответ 4
Простое объяснение по аналогии
Синхронное выполнение
Мой босс занятой человек. Он говорит мне, чтобы написать код. Я говорю ему: хорошо. Я начинаю, и он смотрит на меня, как стервятник, стоящий позади меня, с моего плеча. Я как "Чувак, WTF: почему бы тебе не пойти и не сделать что-нибудь, пока я закончу это?"
ему нравится: "Нет, я жду прямо здесь, пока ты не закончишь". Это синхронно.
Асинхронное выполнение
Босс говорит мне сделать это, и вместо того, чтобы ждать моей работы, босс уходит и выполняет другие задачи. Когда я заканчиваю свою работу, я просто сообщаю своему боссу и говорю: "Я СДЕЛАН!" Это асинхронное выполнение.
(Примите мой совет: НИКОГДА не работайте с боссом позади вас.)
Ответ 5
Синхронное выполнение означает, что выполнение происходит в одной серии. A->B->C->D
. Если вы вызываете эти подпрограммы, A
будет запущен, затем закончите, затем начнется B
, затем закончите, затем запустится C
и т.д.
С асинхронным выполнением вы начинаете процедуру, и пусть она запускается в фоновом режиме, когда вы начинаете свой следующий, а затем в какой-то момент говорите "подождите, пока это не закончится". Это больше похоже на:
Запустить A->B->C->D->
Подождите, пока A
закончит
Преимущество состоит в том, что вы можете выполнить B
, C
и /D
, пока A
все еще работает (в фоновом режиме, в отдельном потоке), чтобы вы могли лучше воспользоваться своими ресурсами и меньше "зависает" или "ждет".
Ответ 6
Синхронный означает, что вызывающий абонент ожидает ответа или завершения, асинхронный, что вызывающий абонент продолжает, и ответ приходит позже (если применимо).
В качестве примера:
static void Main(string[] args)
{
Console.WriteLine("Before call");
doSomething();
Console.WriteLine("After call");
}
private static void doSomething()
{
Console.WriteLine("In call");
}
Это всегда будет:
Before call
In call
After call
Но если мы должны сделать doSomething асинхронным (несколько способов сделать это), то выход может стать:
Before call
After call
In call
Поскольку метод, выполняющий асинхронный вызов, немедленно продолжит следующую строку кода. Я говорю "может", потому что порядок выполнения не может быть гарантирован асинхронными операциями. Он также может выполняться как оригинал, в зависимости от таймингов потока и т.д.
Ответ 7
В двух словах, синхронизация относится к двум или нескольким начальным и конечным точкам процессов, а не к их исполнениям. В этом примере конечная точка Process A синхронизируется с начальной точкой Process B:
SYNCHRONOUS |--------A--------| |--------B--------|
С другой стороны, асинхронные процессы не синхронизируются с их началом и конечными точками:
ASYNCHRONOUS |--------A--------| |--------B--------|
В тех случаях, когда процесс А перекрывает процесс В, они работают одновременно или синхронно (определение словаря), следовательно, путаница.
ОБНОВЛЕНИЕ: Чарльз Бретана улучшил свой ответ, поэтому этот ответ теперь просто простая (потенциально упрощенная) мнемоника.
Ответ 8
Я думаю, что это немного круто - объяснение, но все же оно разъясняется с использованием примера реальной жизни.
Маленький пример:
Предположим, что воспроизведение аудио включает в себя три шага:
- Получение сжатой песни из жесткого диска
- Декомпрессируйте аудио.
- Воспроизведение несжатого аудио.
Если ваш аудиоплеер делает шаг 1,2,3 последовательно для каждой песни, то он синхронный. Вам нужно будет подождать некоторое время, чтобы услышать песню до тех пор, пока песня не будет извлечена и не распакована.
Если ваш аудиоплеер делает шаг 1,2,3 независимо друг от друга, он является асинхронным. то есть. Во время воспроизведения звука 1 (шаг 3), если он извлекает звук 3 из жесткого диска параллельно (шаг 1), и он разворачивает аудио 2 параллельно. (шаг 2 ) В итоге вы услышите песню, не дожидаясь многого, чтобы получить и распаковать.
Ответ 9
Модель синхронного программирования - поток назначается одной задаче и начинает работать над ней. Когда задача завершена, она становится доступной для следующей задачи. В этой модели нельзя оставить выполняющуюся задачу в середине, чтобы выполнить другую задачу. Давайте обсудим, как эта модель работает в однопоточных и многопоточных средах.
Однопотоковый - если у нас есть пара задач, над которыми нужно поработать, и текущая система предоставляет только один поток, тогда задачи назначаются потоку одна за другой. Это может быть наглядно изображено как
Многопоточный - В этой среде у нас было несколько потоков, которые могут выполнять эти задачи и начинать работать над этим. Это означает, что у нас есть пул потоков (новые потоки также могут быть созданы на основе требований и доступных ресурсов) и куча задач. Таким образом, эти темы могут работать над этим как
Модель асинхронного программирования - В отличие от модели синхронного программирования, здесь поток, однажды начав выполнять задачу, может удержать ее в середине, сохранить текущее состояние и начать выполнение другой задачи.
ТАК ответьте о синхронизации и асинхронности: в iOS, в Android
Источник здесь
Ответ 10
Просто сказано, что асинхронное выполнение делает материал в фоновом режиме.
Например, если вы хотите загрузить файл из Интернета, вы можете использовать синхронную функцию для этого, но он заблокирует ваш поток, пока файл не завершит загрузку. Это может сделать ваше приложение неприемлемым для любого пользовательского ввода.
Вместо этого вы можете загрузить файл в фоновом режиме, используя асинхронный метод. В этом случае функция загрузки возвращается немедленно, и выполнение программы продолжается нормально. Все операции загрузки выполняются в фоновом режиме, и ваша программа будет уведомляться, когда она будет завершена.
Ответ 11
При выполнении такой последовательности, как: a > b > c > d > , если мы получим отказ в середине выполнения, например:
a
b
c
fail
Затем мы начинаем с начала:
a
b
c
d
это синхронно
Если, однако, мы выполняем одну и ту же последовательность: a > b > c > d > , и у нас есть сбой в середине:
a
b
c
fail
... но вместо перезапуска с начала, мы снова начинаем с точки отказа:
c
d
... это известно как асинхронное.
Ответ 12
В качестве очень простого примера,
Синхронная
Представьте, что 3 школьника проинструктированы проводить эстафету на дороге.
1-й студент пробегает свое заданное расстояние, останавливается и передает эстафету 2-му. Больше никто не побежал.
1------>
2.
3.
Когда 2-я студентка достает эстафету, она начинает пробежать определенное расстояние.
1.
2------>
3.
2-я студентка отвязала шнурок для обуви. Теперь она остановилась и снова связывалась. Из-за этого 2-е время окончания увеличено, а 3-е время начала отложено.
1.
--2.--->
3.
Этот шаблон продолжается до тех пор, пока 3-й не получит эстафету от 2-го и закончит гонку.
ASYNCHRONOUS
Представьте себе 10 случайных людей, идущих по одной и той же дороге. Они, конечно, не стоят в очереди, просто случайно ходят по разным местам на дороге в разном темпе.
Шнурок 2-го лица развязался. Она остановилась, чтобы снова связать его.
Но никто не ждет ее, чтобы связать это. Все остальные продолжают идти так же, как и раньше, в том же темпе, что и они.
10--> 9-->
8--> 7--> 6-->
5--> 4-->
1--> 2. 3-->
Ответ 13
Я создал GIF для объяснения этого, надеюсь быть полезным: посмотрите, строка 3 асинхронна, а другие синхронны. все строки перед строкой 3 должны ждать, пока строка не закончит свою работу, но из-за того, что строка 3 асинхронна, следующая строка (строка 4) не ждет строки 3, но строка 5 должна ждать, пока строка 4 завершит свою работу, и строка 6 должна ждать строки 5 и 7 для 6, потому что строки 4,5,6,7 не являются асинхронными.
Ответ 14
Вы вводите в заблуждение синхронный с Parallel vs Series. Синхронный означает все одновременно. Синхронизированное средство, связанное с каждым из них, которое может означать последовательно или с фиксированным интервалом. Пока программа делает все, она работает в серии. Получите словарь... вот почему у нас есть несладкий чай. У вас есть чай или подслащенный чай.
Ответ 15
Синхронный в основном означает, что вы можете выполнять только одно за раз. Асинхронный означает, что вы можете выполнять несколько действий одновременно, и вам не нужно заканчивать выполнение текущей вещи, чтобы перейти к следующей.
Ответ 16
Используйте пример инструкции для приготовления завтрака
- Налить чашку кофе.
- Разогрейте сковороду, затем пожарьте два яйца.
- Обжарить три ломтика бекона.
- Поджарить два куска хлеба.
- Добавьте масло и джем к тосту.
- Налейте стакан апельсинового сока.
Если у вас есть опыт приготовления, вы выполняете эти инструкции асинхронно. Вы начнете разогревать сковороду для яиц, а затем начнете бекон. Вы положили хлеб в тостер, а затем начали яйца. На каждом этапе процесса вы запускаете задачу, а затем переключаете свое внимание на задачи, которые готовы к вашему вниманию.
Приготовление завтрака - хороший пример асинхронной работы, которая не параллельна. Один человек (или поток) может справиться со всеми этими задачами. Продолжая аналогию с завтраком, один человек может приготовить завтрак асинхронно, начав следующую задачу до того, как первая завершится. Кулинария прогрессирует независимо от того, наблюдает ли это кто-то или нет. Как только вы начнете разогревать сковороду для яиц, вы можете начать жарить бекон. Как только бекон начинается, вы можете положить хлеб в тостер.
Для параллельного алгоритма вам понадобится несколько поваров (или потоков). Можно было бы сделать яйца, один - бекон и так далее. Каждый из них будет сосредоточен только на одной задаче. Каждый повар (или нить) будет заблокирован синхронно, ожидая, пока бекон будет готов к переворачиванию, или тост, чтобы хлопнуть.
Ссылка из концепции асинхронного программирования
Ответ 17
Синхронная операция выполняет свою работу перед возвратом к вызывающему.
Асинхронная операция выполняет (большую часть или все) ее работу после возвращения к вызывающему.
Ответ 18
Синхронный. Когда задача выполняется синхронно, вы ожидаете завершения задачи, прежде чем перейти к другой задаче. Одна задача зависит от конца другого
Асинхронный. Когда задача выполняется асинхронно, вы можете напрямую переключиться на другую задачу до того, как предыдущая будет завершена. Одна задача не зависит от другой.
В программировании задачи выполняются по "потоку". Необходимо понять, что для задач можно создать несколько потоков, чтобы избежать стекирования в одной очереди.
При этом понятие синхронного и асинхронного не имеет большого отношения к потокам, поэтому я упоминаю, что редко можно увидеть задачи, выполняемые асинхронно на одном потоке (хотя это технически возможно).
Ответ 19
В отношении "в то же время" определения синхронного исполнения (которое иногда путается), вот хороший способ его понять:
Синхронное выполнение: все задачи в блоке кода выполняются одновременно.
Асинхронное выполнение: все задачи в блоке кода выполняются не одновременно.
Ответ 20
Я думаю, что хороший способ подумать об этом - это классический бег Relay Race
Синхронный: Процессы, подобные членам одной и той же команды, они не будут выполняться до тех пор, пока они не получат эстафету (конец выполнения предыдущего процесса/бегуна), и все же они все действуют синхронно друг с другом.
Асинхронный: там, где процессы, подобные членам разных команд на одной и той же трассе эстафеты, они будут запускаться и останавливаться, асинхронно друг с другом, но в пределах одной гонки (общее выполнение программы).
Имеет ли это смысл?
Ответ 21
Другое английское определение Synchronize is Here
Координация; комбайн.
Я думаю, что это лучшее определение, чем "Происшествие в то же время". Это тоже определение, но я не думаю, что он соответствует тому, как он используется в информатике.
Таким образом, асинхронная задача не координируется с другими задачами, тогда как синхронная задача координируется с другими задачами, поэтому один заканчивается до запуска другого.
Как это достигается, это другой вопрос.
Ответ 22
Выполняется синхронное выполнение очереди очереди один за другим. Предположим, что есть только транспортное средство, которое должно быть долей между друзьями, чтобы добраться до места назначения одним за другим.
В асинхронном случае каждый друг может взять напрокат автомобиль и добраться до места назначения.
Ответ 23
Да, синхронные средства в то же время, в буквальном смысле, означают совместную работу. несколько человеческих/объектов в мире могут одновременно выполнять несколько действий, но если мы посмотрим на компьютер, это говорит о синхронных способах совместной работы процессов, которые означают, что процессы зависят от возврата друг друга и почему они выполняются один после другого в правильной последовательности. В то время как асинхронное означает, что процессы не работают вместе, они могут работать в одно и то же время (если они многопоточны), но работают независимо.