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