Синхронный / асинхронный НЕ НУЖНО СДЕЛАТЬ С МНОЖЕСТВЕННОЙ РЕЗЬБОЙ.
Синхронный или Синхронизированный означает «подключен» или «зависит» каким-то образом. Другими словами, две синхронные задачи должны быть осведомлены друг о друге, и одна задача должна выполняться каким-то образом, которая зависит от другой, например, ждать до начала выполнения другой задачи. Асинхронный означает, что они полностью независимы и ни один из них не должен рассматривать другого каким-либо образом, либо в начале, либо в процессе исполнения.
Синхронный (один поток):
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--------->|
<
, >
. |
Технически концепция синхронного / асинхронного действительно не имеет ничего общего с потоками. Хотя, в общем, необычно найти асинхронные задачи, запущенные в одном потоке, это возможно (см. Ниже примеры), и common обнаруживает две или более задачи, выполняемые синхронно на отдельные потоки ... Нет, концепция синхронного / асинхронного действия должна выполнять только с тем, можно ли инициировать вторую или последующую задачу до того, как другая (первая) задача завершится , или он должен ждать. Вот и все. Какой поток (или потоки), или процессы, или процессоры, или действительно, какое аппаратное обеспечение, задача [s] выполняется, не имеет отношения к делу. Действительно, чтобы сделать это, я отредактировал графику, чтобы показать это.
ASYNCHRONOUS EXAMPLE. При решении многих технических проблем программное обеспечение предназначено для разделения общей проблемы на несколько отдельных задач и последующего выполнения их асинхронно. Хорошими примерами являются инвертирование матрицы или проблема анализа конечных элементов. В вычислениях примером является сортировка списка. Например, процедура быстрой сортировки разбивает список на два списка и сортирует каждый из них, вызывая его рекурсивно. В обоих приведенных выше примерах две задачи могут (и часто выполняются) выполняться асинхронно. Им не нужно быть на отдельных потоках. Даже машина с одним процессором и только один поток исполнения могут быть закодированы, чтобы инициировать обработку второй задачи до того, как первая завершится. Единственным критерием является то, что результаты одной задачи не нужны в качестве входных данных для другой задачи . До тех пор, пока время начала и окончания задач перекрывается (возможно только в том случае, если вывод не нужен в качестве входов для другого), они выполняются асинхронно, независимо от того, сколько потоков используется.
СИНХРОННЫЙ ПРИМЕР. Любой процесс, состоящий из нескольких задач, в которых задачи должны выполняться последовательно, но один должен быть выполнен на другом компьютере (выборка и / или обновление данных, получение котировки акций из финансовой службы и т. Д.). Если он находится на отдельной машине, он находится в отдельном потоке, будь то синхронно или асинхронно.