비동기 실행과 동기 실행은 무엇을 의미합니까? [닫은]


1186

비동기 실행과 동기 실행의 차이점은 무엇입니까?


... 또는 "순차 vs 병렬"실행 ... 진정한 병렬 처리에는 여러 코어가 필요하지만 그렇지 않으면 논리적으로 인터리브됩니다.
samis

8
나는 두 용어를 혼동하고 차이점을 기억하는 방법은 " A JAX" 의 첫 번째 "A" 를 비동기식으로 표시하는 것입니다. JavaScript는 AJAX와 함께 루프에서 요청을 할 때 대기하지 않습니다. 브라우저가 고정 된 웹 사이트의 사용자 환경에 영향을 미치지 않기 때문에 모든 요청이 이전 요청의 응답을 기다리지 않고 거의 동시에 전송됩니다. 즉 비동기
회계사 م

답변:


1747

동 기적으로 무언가를 실행하면 다른 작업으로 넘어 가기 전에 완료 될 때까지 기다립니다. 비동기식으로 무언가를 실행하면 완료되기 전에 다른 작업으로 넘어갈 수 있습니다.

컴퓨터의 맥락에서 이것은 다른 "스레드"에서 프로세스 또는 작업을 실행하는 것으로 해석됩니다. 스레드는 작업 단위로 존재하는 일련의 명령 (코드 블록)입니다. 운영 체제는 다른 스레드로 전환하기 전에 여러 스레드를 관리하고 스레드에 프로세서 시간 ( "슬라이스")을 할당하여 일부 작업을 수행 할 수 있습니다. 핵심에서 (펑을 용서함) 프로세서는 단순히 명령을 실행할 수 있으며 한 번에 두 가지 작업을 수행한다는 개념이 없습니다. 운영 체제는 시간 조각을 다른 스레드에 할당하여이를 시뮬레이션합니다.

이제 여러 코어 / 프로세서를 믹스에 도입하면 실제로는 실제로 일어날 수 있습니다. 운영 체제는 첫 번째 프로세서의 한 스레드에 시간을 할당 한 다음 다른 프로세서의 다른 스레드에 동일한 시간 블록을 할당 할 수 있습니다. 이 모든 것은 운영 체제가 작업 완료를 관리하고 코드를 작성하고 다른 작업을 수행 할 수 있도록하는 것입니다.

비동기 프로그래밍은 작업을 동시에 수행 할 수있을 때 사물이 어떻게 연결되는지에 대한 의미로 인해 복잡한 주제입니다. 주제에 관한 많은 기사와 책이 있습니다. 보세요!


246
나를 혼란스럽게하는 것은 동기는 "동시에"를 의미하지만 위의 의미에서 사용될 때 순차적 을 의미 하고 비동기는 "동시에 아님"을 의미합니다. 누군가이 갈등을 설명 할 수 있습니까?
Damien Roche

45
@ 젠프 (Zenph) :이 맥락에서 전체 코드 블록이 우리의 관심사입니다. 동기는 블록이 동시에 실행됨을 의미합니다 (물론 구성 요소가 순차적으로 실행 됨). 비동기는 블록이 모두 동시에 실행되는 것은 아님을 의미합니다.
Adam Robinson

8
비동기 실행은 프로그램이 메시지를 큐에 보낼 때도 발생합니다 (ActiveMQ, WebSphere MQ, HornetQ, MSMQ 등과 같은 메시징 시스템에서와 같이). 이 경우 비동기 호출에는 다중 스레드 프로그래밍이나 OS 수준의 동시 처리가 필요하지 않습니다.
Paulo Merson 2016 년

287
이상하게도 "동 기적으로"는 "동일한 시계 사용"을 의미하므로 두 명령어가 동시에 동기화되면 동일한 시계를 사용하며 차례로 발생해야합니다. "비동기"는 "동일한 시계를 사용하지 않음"을 의미하므로 명령이 서로 관련이 없습니다. 이것이 역순으로 보이는 이유이며, 용어는 서로의 지시 관계를 언급하지 않습니다. 시계에 대한 각 명령 관계를 나타냅니다. 희망이 도움이됩니다.
Tom Padilla

14
용어는 공학에서 나옵니다. en.wikipedia.org/wiki/Asynchronous_system
Tom Padilla

1150

동기식 / 비동기식은 멀티 스레딩과 관련이 없습니다.

동기 또는 동기화 는 "연결됨"또는 "의존적"을 의미합니다. 즉, 두 개의 동기 작업은 서로를 인식해야하며 한 작업은 다른 작업이 완료 될 때까지 시작 대기와 같이 다른 작업에 종속 된 방식으로 실행되어야합니다.
비동기는 그것들이 완전히 독립적이라는 것을 의미하며, 어느 쪽도 시작 또는 실행 중 어느 쪽도 다른 것을 고려해서는 안됩니다.

동기식 (한 스레드) :

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의 시작 및 끝 지점
  • 수직 막대로 표시되는 CPU 시간 조각 |

기술적으로 동기 / 비동기 개념은 실제로 스레드와 관련이 없습니다 . 일반적으로 동일한 스레드에서 실행되는 비동기 작업을 찾는 것은 일반적이지 않지만 가능합니다 (아래 예 참조) . 별도의 스레드에서 동 기적으로 실행되는 둘 이상의 작업을 찾는 것이 일반적입니다 ... 아니요, 개념 동기 / 비동기의 상관이 단독으로 두 번째 또는 후속 작업이 다른 (첫 번째) 작업 전에 시작할 수 있습니다 완료하거나 대기해야하는지 여부와 함께. 그게 다야. 작업이 실행되는 스레드 (또는 스레드), 프로세스 또는 CPU 또는 실제로 어떤 하드웨어가 관련이 없습니다. 실제로이 점을 나타 내기 위해 그래픽을 편집하여 표시했습니다.


비동기식 예 :

많은 엔지니어링 문제를 해결하기 위해 소프트웨어는 전체 문제를 여러 개의 개별 작업으로 분할 한 다음 비동기 적으로 실행하도록 설계되었습니다. 행렬을 반전하거나 유한 요소 분석 문제가 좋은 예입니다. 컴퓨팅에서 목록을 정렬하는 것이 예입니다. 예를 들어, quicksort 루틴은 목록을 두 개의 목록으로 나누고 각 목록에서 빠른 정렬을 수행하여 재귀 적으로 (quicksort) 호출합니다. 위의 두 가지 예에서 두 작업 모두 비동기 적으로 실행될 수 있습니다 (종종). 별도의 스레드에있을 필요는 없습니다. CPU가 하나이고 실행 스레드가 하나 뿐인 시스템이라도 첫 번째 작업이 완료되기 전에 두 번째 작업의 처리를 시작하도록 코딩 할 수 있습니다. 유일한 기준은 한 작업의 결과가 다른 작업에 대한 입력으로 필요하지 않다는 것입니다. 작업의 시작 및 종료 시간이 겹치면 (다른 쪽의 입력으로 둘 중 어느 것도 출력이 필요하지 않은 경우에만 가능) 사용중인 스레드 수에 관계없이 비동기식으로 실행됩니다.

동기식 예 :

작업이 순서대로 실행되어야하지만 다른 시스템에서 실행되어야하는 여러 작업으로 구성된 모든 프로세스 (데이터 가져 오기 및 / 또는 업데이트, 금융 서비스에서 주식 시세 등) 별도의 시스템에있는 경우 동기식이든 비동기식이든 별도의 스레드에 있습니다.


92
세계에서 할 이유 단어는 항상 동기 .. 사전에서 ... 다시이 오는 날 떠나 ... 컴퓨터에서 다른 의미 : 같은 시간에 발생. 비동기 : 동시에 발생하지 않습니다.
Muhammad Umer

17
그러나 컴퓨터에서 볼 수 있듯이 반대의 의미입니다
Muhammad Umer

5
어쩌면 명명법이 다른 작업의 완료와 함께 작업의 시작이 "동기화"되었는지에 따라 결정될 수 있습니까?
Charles Bretana

11
@MuhammadUmer : 컴퓨터 세계에서 동시에 발생하는 것을 동시성이라고합니다.
Roy Ling

5
IMHO,이 그림들은 모두 동기식 작업과 비동기식 작업 실행을 모두 설명하지는 않습니다. 예를 들어, 두 번째 그림은 비동기식 작업에 여러 스레드가 필요함을 나타냅니다. 실제로는 그렇지 않습니다. 또한 해당 작업은 병렬로 실행되어야하므로 요구 사항은 아닙니다. 또는 "동기식"그림은 일부 콜 사이트에서 작업이 비동기식으로 디스패치되어 직렬 작업 스케줄러에서 실행되는 방식을 잘 보여줍니다.
CouchDeveloper

641

더 간단한 용어로 :

동기식

영화 표를 받기 위해 대기 중입니다. 당신 앞에있는 모든 사람이 하나를 얻을 때까지 하나를 얻을 수 없으며, 당신 뒤에있는 사람들에게도 동일하게 적용됩니다.

비동기

당신은 다른 많은 사람들과 식당에 있습니다. 당신은 음식을 주문합니다. 다른 사람들도 음식을 주문할 수 있으며, 주문을하기 전에 음식이 조리되어 제공 될 때까지 기다릴 필요가 없습니다. 부엌 식당에서 일하는 노동자들은 계속해서 요리하고, 서빙하고, 주문을받습니다. 사람들은 요리하자마자 음식을 제공받을 것입니다.


10
누군가 사과를 사과와 비교하기를 원한다면; 식당 시나리오를 동기식으로 원한다면 음식을 주문할 때 식당의 다른 모든 사람들이 음식 등을 주문하기 전에 음식이 도착할 때까지 기다려야합니다. 그러나 컴퓨팅 세계에서이 시나리오는 유용 할 수 있습니다. 각 고객이 원하는 것을 결정할 수 없다고 말하고 이전 고객이 원하는지 여부를 결정하기를 원한다면 주문 전에 음식이 도착하기를 기다려야한다는 것이 합리적입니다.
Fonix

그냥 추가하면 ... 비동기 작업의 대기열에서와 같이 작업이 실행되도록 할 수는 있지만 전혀 필수는 아닙니다.
Sreekanth Karumanaghat

5
매우 간단하고 실제적인 예
Manish

귀하의 예를 더욱 진전시키기 위해, 그들은 티켓 판매를위한 몇 개의 게이트를 고려할 수 있습니다. 따라서 각 라인은 다른 라인과 비동기식으로 작동하지만 자체적으로 동기식으로 작동 할 수 있습니다!
Saeed Ahadian

334

유추를 통한 간단한 설명

동기 실행

내 상사는 바쁜 사람입니다. 그는 코드를 작성하라고 말합니다. 나는 그에게 말한다. 나는 시작했고 그는 내 어깨 너머로 내 뒤에 서있는 독수리처럼 나를보고있다. 나는 "Dude, WTF : 내가 이걸 끝내는 동안 무언가를 해보지 않겠습니까?"

"아니요, 당신이 끝날 때까지 기다리고 있어요 ." 동기식입니다.

비동기 실행

상사는 나에게 그렇게하라고 지시하고 내 일을 바로 기다리는 대신 상사가 떠나 다른 일을한다. 일을 마치면 나는 단순히 상사에게보고하고 "나는 끝났어!"라고 말합니다. 이것은 비동기 실행입니다.

(나의 충고를 들어라 : 절대로 당신 뒤의 사장과 일하지 마십시오.)


28
나는 당신이 사임으로 이것을 할 때 훨씬 더 재미 있어요.
Daedric

91

동기 실행 은 단일 시리즈에서 실행이 발생 함을 의미합니다. A->B->C->D. 이러한 루틴을 호출하는 경우 A실행, 종료, B시작, 종료, C시작 등을 수행합니다.

비동기 실행을 사용하면 루틴을 시작하고 다음을 시작할 때 백그라운드에서 실행되도록 한 다음 "이것이 끝날 때까지 기다리십시오"라고 말합니다. 더 비슷하다 :

시작 A->B->C->D->대기 에 대한 A마무리

장점은 실행할 수 있다는 것입니다 B, C그리고 나 D하면서 A여전히 (별도의 스레드에서 백그라운드에서)를 실행하는 당신이 당신의 자원을 더 잘 활용하고 더 적은 "중지"또는 "대기"를 가질 수 있습니다.


@ Reed Copsey ...... 좋은 설명을 주셔서 감사합니다 ..... Async-Exec에 대한 추가 정보를 원했습니다 ... Async Exec의 답변을 바탕으로 .... Start A-> B-> C-> D-> A를 기다릴 때까지 기다립니다 ... 따라서 모든 A, B, C, D는 한 번에 시작됩니다 ......... 그들은 A가 끝나기를 기다립니다 ..... B는 A가 완료된 후에 만 ​​완료되고 C는 B 이후 등에서 종료됩니다. 아니면 B가 먼저 끝나고 A가 끝날 수 있습니까?
Devrath

8
@Devrath 작업은 임의의 순서로 완료 될 수 있습니다.
리드 경찰

59

간단히 말해서, 동기화는 두 개 이상의 프로세스 '를 의미 시작 지점, NOT 자신의 실행 . 이 예에서 프로세스 A의 엔드 포인트는 프로세스 B의 시작점과 동기화됩니다.

동기식
   | -------- A -------- |
                     | -------- B -------- |

반면에 비동기 프로세스 는 시작 및 엔드 포인트가 동기화 되지 않습니다 .

비동기
   | -------- A -------- |
         | -------- B -------- |

프로세스 A가 프로세스 B와 겹치는 경우 동시에 또는 동 기적으로 실행되고 (사전 정의) 혼란이 발생합니다.

업데이트 : Charles Bretana는 그의 대답을 향상 시켰 으므로 이제이 대답은 단순한 (잠재적으로 지나치게 단순화 된) 니모닉입니다.


2
찰스 Bretana 응답의 복사
네쉬 Saini에게

2
@DineshSaini-내 다이어그램이 약간 다릅니다. 명확성을 위해 두 경우 모두 A를 B 위에 배치하여 시작 및 끝 점이 동기화되는지 여부를 강조합니다. Charles Bretana의 다이어그램은 동기 프로세스를 "동기화"하지 않고 순서대로 배치합니다. (저는 "개선"이라는 그의 답변 아래에 의견을
달려고했지만

훌륭한 다이어그램. 상위 SYNC를 호출하는 방법은 상단 다이어그램에서 A의 시작과 끝이 동시에 동시에 일어나거나 다른 이벤트가 개입하지 않았거나 A의 완료를 방해 할 수 있다는 의미에서 효과적이라고 생각합니다. 동기화는 실제로 사전 동기화가 가능하도록 시작과 끝이 너무 가까운 CPU 레지스터에 추가하는 것과 같이 단일 작업을 개별적으로 참조 할 수 있습니다.
Dean Radcliffe

55

동기는 호출자가 응답 또는 완료를 대기하고 호출자가 계속하고 응답이 나중에있는 경우 비동기식임을 의미합니다 (해당되는 경우).

예로서:

    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

비동기 호출을 수행하는 메소드는 즉시 다음 코드 행으로 계속 진행되기 때문입니다. 비동기 작업에서는 실행 순서를 보장 할 수 없으므로 "could"라고 말합니다. 스레드 타이밍 등에 따라 원본으로 실행할 수도 있습니다.


34

나는 이것이 간단한 설명이라고 생각하지만 실제 사례를 사용하여 명확하게 설명합니다.

작은 예 :

오디오 재생에는 세 단계가 포함되어 있다고 가정 해 보겠습니다.

  1. 하드 디스크에서 압축 된 노래 가져 오기
  2. 오디오를 압축 해제하십시오.
  3. 압축되지 않은 오디오를 재생하십시오.

오디오 플레이어가 모든 노래에 대해 1,2,3 단계를 순차적으로 수행하면 동기화됩니다. 노래가 실제로 가져오고 압축이 풀릴 때까지 노래를 들으려면 잠시 기다려야합니다.

오디오 플레이어가 서로 독립적으로 1,2,3 단계를 수행하는 경우 비동기입니다. 즉. 오디오 1 (3 단계)을 재생하는 동안 하드 디스크에서 오디오 3을 병렬로 가져 오면 (1 단계) 오디오 2를 병렬로 압축 해제합니다. 가져 오기 및 압축 해제를 많이 기다리지 않고 노래를들을 수있게됩니다.


32

동기화 및 비동기 작업은 현재 작업 과 관련된 새 작업의 실행 순서에 관한 것입니다. 테이블의 두 가지 작업 : 현재 작업과 새 작업

동기식 (차단)-작업이 하나씩 실행됨을 의미합니다. 다음 작업은 이전 작업이 완료된 후에 만 ​​시작됩니다. 완료 Task 2될 때까지 시작되지 않습니다Task 1

비동기식 (비 차단) – 태스크가 코드를 실행하고 나중에 결과 (예 : 콜백, 기능)를 알리 겠다는 약속으로 즉시 제어권을 반환 함을 의미합니다. 완료되지 않은 Task 2경우에도 실행됩니다Task 1

동기화 및 비동기에 대한 답변 : iOS , Android


동기식 멀티 스레드 예제의 다이어그램은 동시에 실행되는 스레드를 나타내는 것으로 보입니까?
samis

@ sαmosΛris 당신은 타임 라인을 나타내는 X 축과 같은 스레드를 고려할 수 있습니다
yoAlex5

x 축은 일반적으로 공간 치수로 사용됩니다. 시간에 대한 t 축-알고리즘 복잡도 분석에서 발견되는 중요한 차이점.
samis

23

단순히 비동기 실행이 백그라운드에서 수행되고 있다고 말했다.

예를 들어 인터넷에서 파일을 다운로드하려는 경우 동기 기능을 사용하여 파일을 다운로드 할 수 있지만 파일 다운로드가 완료 될 때까지 스레드가 차단됩니다. 따라서 응용 프로그램이 모든 사용자 입력에 응답하지 않을 수 있습니다.

대신 비동기 방법을 사용하여 백그라운드에서 파일을 다운로드 할 수 있습니다. 이 경우 다운로드 기능이 즉시 반환되고 프로그램 실행이 정상적으로 계속됩니다. 모든 다운로드 작업은 백그라운드에서 수행되며 완료되면 프로그램에 알림이 표시됩니다.


1
당신의 모범은 어떻게 더 빨라질까요? 결국 다운로드 기간이 완료 될 때까지 파일을 재생할 수 없습니다. 설명 할 수 있습니까? 나는 비동기를 이해하지 못하고 아마도 나일 것 같지만 다른 프로세스가 실행되는 동안 다른 다운로드 또는 프로세스가 무엇을하고 있습니까 (다운로드 받기)? 앱에서 비동기 프로세스를 다시 다운로드 (다운로드) 할 때까지 무엇을 할 수 있습니까? 그렇다면 어떤 상황에서도 사용자에게 어떤 종류의 대기 메커니즘을 표시해야합니까?
PositiveGuy

4
더 빠를 필요는 없습니다. 메인 스레드를 차단하지 않기 때문에 다른 종류의 사용자 입력을 처리 할 수 ​​있습니다. 예를 들어, 사용자는 다운로드를 취소하거나 다른 파일을 동시에 다운로드하기를 원할 수 있습니다.
Michał Piaskowski

19

정말 간단한 예로

동기식

3 명의 학교 학생들이 도로에서 릴레이 경주를하도록 지시했다고 상상해보십시오.

첫 번째 학생은 주어진 거리로 달려가 정지하고 배턴을 두 번째로 전달합니다. 아무도 달리기 시작하지 않았습니다.

1------>
        2.
                3.

두 번째 학생이 지휘봉을 회수하면 주어진 거리를 달리기 시작합니다.

      1.
        2------>
                3.

두 번째 학생은 신발 끈을 묶지 않았습니다. 이제 그녀는 멈추고 다시 묶었 다. 이로 인해 2 차 종료 시간이 연장되었고 3 차 시작 시간이 지연되었습니다.

      1.
        --2.--->
                3.

이 패턴은 3 일이 2 일부터 지휘봉을 가져와 경주를 마칠 때까지 계속됩니다.

비동기

같은 길을 걷고있는 10 명의 무작위 사람들을 상상해보십시오. 그들은 물론 대기열에 있지 않고 도로의 다른 장소에서 다른 속도로 무작위로 걷는 것입니다.

두 번째 사람의 신발 끈이 풀렸다. 그녀는 다시 묶기 위해 멈췄다.

그러나 아무도 그녀가 묶여 있기를 기다리고 있지 않습니다. 다른 모든 사람들은 여전히 ​​같은 속도로 그들과 같은 방식으로 걷고 있습니다.

10-->    9-->
   8--> 7-->   6-->
 5-->     4-->
1-->   2.    3-->

18

나는 이것을 설명하기 위해 gif를 만들었고 도움이되기를 바랍니다 .3 행은 비동기이고 다른 것은 동기식입니다. 3 행 앞의 모든 행은 행이 완료 될 때까지 기다려야하지만 3 행은 비동기 적이며 다음 행 (4 행)이므로 3 행을 기다리지 말고 5 행은 4 행이 작업을 완료 할 때까지 기다려야합니다. 라인 4,5,6,7은 비동기 적이 아니기 때문에 라인 6은 라인 5와 라인 7을 기다려야합니다. 라인 3은 비동기이고 다른 라인은 동기입니다


12

a> b> c> d>와 같은 시퀀스를 실행할 때 다음과 같이 실행 도중 실패하면

a
b
c
fail

그런 다음 처음부터 다시 시작합니다.

a
b
c
d

이것은 동 기적이다

그러나 동일한 순서로 a> b> c> d>를 실행하면 중간에 오류가 발생합니다.

a
b
c
fail

...하지만 처음부터 다시 시작하는 대신 실패 지점부터 다시 시작합니다.

c
d

... 이것은 비동기식입니다.


1
당신의 예에 더 많은 맥락을 제공함으로써 당신이 의미하는 바를보다 정확하게 이해할 수
있습니까?

5
이 답변은 간단하지 않습니다.
user207421

7

동기 대 병렬 대 시리즈를 혼동하고 있습니다. 동기 평균은 모두 동시에입니다. 동기화 된 것은 서로 또는 직렬로 또는 고정 된 간격을 의미 할 수있는 관련 수단을 의미합니다. 프로그램이 모든 작업을 수행하는 동안 프로그램은 연속적으로 실행됩니다. 사전을 얻으십시오 ... 이것이 우리가 달콤한 차를 마시는 이유입니다. 차 또는 달게 한 차가 있습니다.


3
실제로 "동기화"는 명령어와 시계 간의 관계를 나타냅니다. 지침 자체 간의 관계가 아닙니다. 이것이 "동기"로 거꾸로 보이는 이유는 실제로 서로를 의미합니다. 그러나 명령어는 시계와 동기화됩니다. "비동기"는 "언제든지 발생하지 않습니다"라는 의미입니다. 명령을 시계에 동기화 할 필요는 없습니다. 예, 사전 정의가 있지만 올바른 상황을 정의하고 있는지 확인해야합니다.
Tom Padilla

1
동기가 컴퓨팅에서 ' 동시 '를 의미하는 것은 아닙니다 . 당신은 차와 달콤한 차와 '병렬 대 시리즈'의 동기와 동기화를 혼동합니다. 대답은 전혀 이해가되지 않습니다.
user207421

7

동기는 기본적으로 한 번에 하나만 실행할 수 있음을 의미합니다. 비동기는 한 번에 여러 작업을 실행할 수 있으며 다음 작업으로 넘어 가기 위해 현재 작업을 완료하지 않아도됨을 의미합니다.


여러 스레드가 동시에 실행되는 대신 멀티 스레딩이라고하는 것은 아닙니다.
Sreekanth Karumanaghat

7

아침 식사를위한 지침의 예를 사용하십시오

  1. 커피 한 잔을 따르십시오.
  2. 냄비를 데우고 계란 두 개를 볶습니다.
  3. 베이컨 세 조각을 볶습니다.
  4. 두 조각의 빵을 토스트하십시오.
  5. 토스트에 버터와 잼을 넣으십시오.
  6. 오렌지 주스 한 잔을 따르십시오.

요리 경험이있는 경우 해당 명령을 비동기 적으로 실행합니다. 계란 팬을 데우기 시작한 다음 베이컨을 시작합니다. 빵을 토스터에 넣고 계란을 시작합니다. 프로세스의 각 단계에서 작업을 시작한 다음주의를 기울일 준비가 된 작업에주의를 기울이십시오.

아침 식사 요리 는 병렬 작업이 아닌 비동기 작업 의 좋은 예입니다 . 한 사람 (또는 스레드)이이 모든 작업을 처리 할 수 ​​있습니다. 아침 식사 비유를 계속하면 한 사람이 첫 번째 작업이 완료되기 전에 다음 작업을 시작하여 아침 식사를 비동기 적으로 만들 수 있습니다. 누군가보고 있든 없든 요리는 진행됩니다. 계란 팬을 데우기 시작하면 베이컨 튀김을 시작할 수 있습니다. 베이컨이 시작되면 빵을 토스터에 넣을 수 있습니다.

병렬 알고리즘의 경우 여러 쿡 (또는 스레드)이 필요합니다. 하나는 계란, 하나는 베이컨 등을 만들 것입니다. 각 작업은 하나의 작업에만 집중됩니다. 각 쿡 (또는 실)은 베이컨이 뒤집어 지거나 토스트가 터질 때까지 동기식으로 차단됩니다.

비동기 프로그래밍 개념 에서 참조



1

은 "에 관해서 같은 시간에 (때로는 혼란) 동기 실행의"정의, 여기를 이해하는 좋은 방법입니다 :

동기 실행 : 코드 블록 내의 모든 작업이 동시에 실행됩니다.

비동기 실행 : 코드 블록 내의 모든 작업이 동시에 실행되는 것은 아닙니다.


나는 당신이 '효과적으로 동시에'또는 '실제적인 목적으로'라고 말하면 이것에 더 동의 할 것입니다. 나는 공감대가 일이 실제로 같은 기간에 이루어지고 있다는 부정확 한 진술에 대한 것이라고 생각합니다 .
Dean Radcliffe

1

나는 그것을 생각하는 좋은 방법은 고전적인 달리기 릴레이 경주라고 생각합니다.

동기식 : 같은 팀 구성원과 같은 프로세스로, 배턴 (이전 프로세스 / 러너 실행 종료)을받을 때까지 실행되지 않지만 모두 서로 동기화되어 작동합니다.

비동기 : 동일한 릴레이 레이스 트랙에서 다른 팀의 구성원과 같은 프로세스가 실행되는 경우 서로 경주하지만 동일한 레이스 내에서 (전체 프로그램 실행) 실행 및 중지됩니다.

말이 되나요?


1

Synchronize의 다른 영어 정의는 여기

동등 어구; 결합시키다.

"동시에 일어나는 것"보다 더 나은 정의라고 생각합니다. 저것은 또한 정의이지만, 그것이 그것이 컴퓨터 과학에서 사용되는 방식에 맞는 것이라고 생각하지 않습니다.

따라서 비동기 작업은 다른 작업과 조정되지 않지만 동기 작업은 다른 작업과 조정되므로 다른 작업이 시작되기 전에 완료됩니다.

그것이 달성되는 방법은 다른 질문입니다.


0

동기는 하나의 작업이 대기열 방식으로 실행됨을 의미합니다. 하나의 차량으로 목적지에 도달하기 위해 친구간에 공유해야하는 차량 만 공유한다고 가정합니다.
비동기적인 경우 각 친구는 차량을 빌려 목적지에 도착할 수 있습니다.


0

예 동기는 동시에 문자 그대로 모든 작업을 수행하는 것을 의미합니다. 세계의 여러 인간 / 물체가 동시에 여러 작업을 수행 할 수 있지만 컴퓨터를 살펴보면 프로세스가 함께 작동하는 프로세스를 의미하는 동 기적 수단을 의미합니다. 적절한 순서로 다른 후. 비동기는 프로세스가 함께 작동하지 않는 곳을 의미하지만 동시에 (멀티 스레드에있는 경우) 작동 할 수 있지만 독립적으로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.