Пользовательская галерея PHP

Синхронный / асинхронный НЕ НУЖНО СДЕЛАТЬ С МНОЖЕСТВЕННОЙ РЕЗЬБОЙ.

Синхронный или Синхронизированный означает «подключен» или «зависит» каким-то образом. Другими словами, две синхронные задачи должны быть осведомлены друг о друге, и одна задача должна выполняться каким-то образом, которая зависит от другой, например, ждать до начала выполнения другой задачи. Асинхронный означает, что они полностью независимы и ни один из них не должен рассматривать другого каким-либо образом, либо в начале, либо в процессе исполнения.

Синхронный (один поток):

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, представленные символами <, >.
  • Временные срезы процессора, представленные вертикальными полосками |

Технически концепция синхронного / асинхронного действительно не имеет ничего общего с потоками. Хотя, в общем, необычно найти асинхронные задачи, запущенные в одном потоке, это возможно (см. Ниже примеры), и common обнаруживает две или более задачи, выполняемые синхронно на отдельные потоки ... Нет, концепция синхронного / асинхронного действия должна выполнять только с тем, можно ли инициировать вторую или последующую задачу до того, как другая (первая) задача завершится , или он должен ждать. Вот и все. Какой поток (или потоки), или процессы, или процессоры, или действительно, какое аппаратное обеспечение, задача [s] выполняется, не имеет отношения к делу. Действительно, чтобы сделать это, я отредактировал графику, чтобы показать это.

ASYNCHRONOUS EXAMPLE. При решении многих технических проблем программное обеспечение предназначено для разделения общей проблемы на несколько отдельных задач и последующего выполнения их асинхронно. Хорошими примерами являются инвертирование матрицы или проблема анализа конечных элементов. В вычислениях примером является сортировка списка. Например, процедура быстрой сортировки разбивает список на два списка и сортирует каждый из них, вызывая его рекурсивно. В обоих приведенных выше примерах две задачи могут (и часто выполняются) выполняться асинхронно. Им не нужно быть на отдельных потоках. Даже машина с одним процессором и только один поток исполнения могут быть закодированы, чтобы инициировать обработку второй задачи до того, как первая завершится. Единственным критерием является то, что результаты одной задачи не нужны в качестве входных данных для другой задачи . До тех пор, пока время начала и окончания задач перекрывается (возможно только в том случае, если вывод не нужен в качестве входов для другого), они выполняются асинхронно, независимо от того, сколько потоков используется.

СИНХРОННЫЙ ПРИМЕР. Любой процесс, состоящий из нескольких задач, в которых задачи должны выполняться последовательно, но один должен быть выполнен на другом компьютере (выборка и / или обновление данных, получение котировки акций из финансовой службы и т. Д.). Если он находится на отдельной машине, он находится в отдельном потоке, будь то синхронно или асинхронно.

0
задан lucabodd 25 February 2015 в 15:20
поделиться