asynchronous async event - 비동기 대 동기 실행은 무엇을 의미합니까?





10 Answers

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

Synchronous 또는 Synchronized 는 어떤 식 으로든 "connected"또는 "dependent"를 의미합니다. 즉, 두 개의 동기 작업이 서로 인식되어야하며, 한 작업은 다른 작업이 완료 될 때까지 대기하기 위해 어떤 방식 으로든 다른 작업에 종속적으로 실행되어야합니다.
비동기 란 완전히 독립적이며 시작이나 실행 중 어떤 방법으로도 다른 것을 고려해야한다는 것을 의미합니다.

동기식 (한 스레드) :

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, 또는 실제로 어떤 하드웨어가 실행되는지는 관련이 없습니다. 사실,이 점을 확인하기 위해 그래픽을 편집 해 보았습니다.

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

동기 예. 작업을 순서대로 실행해야하지만 여러 컴퓨터에서 실행해야하는 여러 작업으로 구성된 모든 프로세스 (데이터 가져 오기 및 / 또는 업데이트, 금융 서비스에서 주식 시세 가져 오기 등). 그것은 별도의 컴퓨터에 있다면 그것은 동기 또는 비동기 여부에 관계없이 별도의 스레드에 있습니다.

loop node function

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




내가 할 수있는 한 간단하게 설명하려고 노력할 것입니다. (잘하면) 기억할 것입니다.

동기 실행

내 상사는 바쁜 사람입니다. 그는 코드를 작성하라고 알려줍니다. 나는 그에게 말한다. 좋아. 나는 시작하고 그는 나를 뒤에서 내 어깨에 떨어져 독수리처럼 지켜보고있다. 나는 "Dude, WTF 같아. 왜 내가이 일을 끝내는 동안 너는 가서 뭔가하지?"

그는 좋아해. "아니, 네가 끝날 때까지 여기서 기다리고 있어." 이것은 동기식입니다.

비동기 실행

사장님이 저에게 그렇게하라고 말씀하십니다. 저의 일을 위해 바로 기다리는 것보다 사장님이 떨어져서 다른 일을합니다. 직장을 마치면 상사에게보고하고 "나는 끝났어!"라고 말하면됩니다. 이것은 비동기 실행입니다.

정말 간단합니다! 희망이 도움이됩니다.

(제 충고를 지키십시오 : 결코 당신 뒤의 보스와 일하십시오.)




동기식은 호출자가 응답 또는 완료를 기다리고, 호출자가 계속해서 비동기 적이며 응답이 나중에 온다는 것을 의미합니다 (적용 가능한 경우).

예로서:

    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

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




나는 이것이 약간의 설명에 관한 것이지만 여전히 실제 생활의 예를 사용하여 명확하게 설명한다고 생각한다.

작은 예 :

오디오를 재생하는 과정에는 세 단계가 있습니다.

  1. 하드 디스크에서 압축 된 노래 가져 오기
  2. 오디오의 압축을 푸십시오.
  3. 압축되지 않은 오디오를 재생합니다.

오디오 플레이어가 모든 노래에 대해 1,2,3 단계를 순차적으로 수행하면 동기가 발생합니다. 노래가 실제로 들리거나 압축 해제 될 때까지 노래를 들으려면 얼마 동안 기다려야합니다.

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




a> b> c> d>와 같은 시퀀스를 실행할 때 아래와 같은 실행 중 오류가 발생하면 :

a
b
c
fail

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

a
b
c
d

이것은 동기식이다.

그러나 a> b> c> d>와 같은 시퀀스를 실행하면 중간에 오류가 발생합니다.

a
b
c
fail

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

c
d

... 이것은 비동기식으로 알려져 있습니다.




동기식 프로그래밍 모델 - 스레드가 하나의 작업에 할당되고 작업을 시작합니다. 작업이 완료되면 다음 작업을 수행 할 수 있습니다. 이 모델에서는 실행중인 태스크를 중간에두고 다른 태스크를 수행 할 수 없습니다. 이 모델이 단일 및 다중 스레드 환경에서 어떻게 작동하는지에 대해 논의 해 보겠습니다.

단일 스레드 - 우리가 작업해야 할 몇 가지 작업이 있고 현재 시스템이 단 하나의 스레드 만 제공하면 작업은 스레드에 하나씩 할당됩니다. 그림으로 묘사 될 수 있습니다.

Multi-Threaded -이 환경에서는 이러한 작업을 수행 할 수있는 여러 스레드를 사용하여 작업을 시작했습니다. 이는 우리가 스레드 풀 (새로운 스레드는 요구 사항과 사용 가능한 리소스를 기반으로 생성 될 수 있음)과 많은 작업을 의미합니다. 그래서이 스레드는 다음과 같이 작업 할 수 있습니다.

비동기식 프로그래밍 모델 - 동기식 프로그래밍 모델과는 달리, 여기 스레드는 일단 태스크를 실행하기 시작하면 중간에 유지하고 현재 상태를 저장하고 다른 태스크를 시작합니다.

단일 스레드

멀티 스레드

더 많은 정보 - https://codewala.net/2015/07/29/concurrency-vs-multi-threading-vs-asynchronous-programming-explained/




동기식은 기본적으로 한 번에 한 가지만 실행할 수 있음을 의미합니다. 비동기 란 한 번에 여러 것을 실행할 수 있으며 현재 작업을 끝내지 않아도 다음 작업으로 넘어갈 수 있음을 의미합니다.




동기식 : 작업이 동 기적으로 실행되면 다른 작업으로 이동하기 전에 작업이 완료 될 때까지 대기합니다. 하나의 과제는 다른 과제의 끝 부분에 달려 있습니다.

비동기식 : 작업이 비동기 적으로 실행되면 이전 작업이 완료되기 전에 다른 작업으로 직접 전환 할 수 있습니다. 하나의 과제는 다른 과제에 의존하지 않습니다.

프로그래밍에서 작업은 " 스레드 "에서 실행됩니다. 하나의 큐에 스태킹을 피하기 위해 작업을 위해 여러 스레드를 만들 수 있다는 것을 이해해야합니다.

즉, 동기식 및 비동기식의 개념은 스레드와 관련이 없기 때문에, 기술적으로 가능하더라도 단일 스레드에서 비동기 적으로 실행되는 태스크를 보는 것은 드뭅니다.




나는 그것을 생각하는 좋은 방법이 클래식 러닝 릴레이 레이스라고 생각합니다.

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

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

그것은 의미가 있습니까?




동기식이란 대기열 방식 실행이 하나씩 실행됨을 의미합니다. 친구가 자신의 목적지에 도달하기 위해 공유해야하는 차량이 하나만 있다고 가정하면 차량은 하나씩 공유됩니다.
비동기식 인 경우 각 친구는 렌트 차량을 얻어 목적지까지 갈 수 있습니다.




Related