ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • # 06. 동기와 비동기
    카테고리 없음 2022. 11. 7. 14:15

      1.  Blocking  &  None-Blocking  &  Synchronous  &  Asynchronous

    Blocking 과 Non-blocking, Sync 와 Async 은 전혀 다른 개념이지만 같이 이해해야한다. 두 가지의 차이는 관점을 어디에 두냐에 따라 달라진다. 

     

    Blocking / Non-blocking 은 호출된 함수가 호출한 함수에게 제어권을 바로 주느냐 안주느냐,
    Sync / Async 는 호출된 함수의 종료를 호출한 함수가 처리하느냐, 호출된 함수가 처리하느냐의 차이다.

     

      • 바로 리턴하지 않으면 Blocking
      • 바로 리턴하면 NonBlocking
      • 호출되는 함수의 작업 완료를 호출한 함수가 신경쓰면 Synchronous
      • 호출되는 함수의 작업 완료를 호출된 함수가 신경쓰면 Asynchronous

     

     

     

    Blocking

    • A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것.

     

     

     

    None-Blocking

    • A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른 일을 할 수 있도록 하는 것.

     

     

     

    Synchronous

    • Thread1이 작업을 시작 시키고, Task1이 끝날때까지 기다렸다 Task2를 시작한다.
    • 작업 요청을 했을 때 요청의 결과값(return)을 직접 받는 것이다.
    • 요청의 결과값이 return값과 동일하다.
    • 호출한 함수가 작업 완료를 신경 쓴다.
    • 즉 A 함수가 B 함수를 호출 할 때, B 함수의 결과를 A 함수가 처리하는 것.

     

     

     

    Asynchronous

    • Thread1이 작업을 시작 시키고, 완료를 기다리지 않고, Thread1은 다른 일을 처리할 수 있다.
    • 작업 요청을 했을 때 요청의 결과값(return)을 간접적으로 받는 것이다.
    • 요청의 결과값이 return값과 다를 수 있다.
    • 해당 요청 작업은 별도의 스레드에서 실행하게 된다.
    • 콜백을 통한 처리가 비동기 처리라고 할 수 있다.
    • 호출된 함수(callback 함수)가 작업 완료를 신경 쓴다.
    • A 함수가 B 함수를 호출 할 때, B 함수의 결과를 B 함수가 처리하는 것. (callback)

     

     

     

     2.  None-Blocking  &  Synchronous  

    호출되는 함수는 바로 리턴하고, 호출하는 함수는 작업 완료 여부를 신경쓴다.

     

    즉, NonBlocking 메서드 호출 후 바로 반환 받아서 다른 작업을 할 수 있게 되지만, 메서드 호출에 의해 수행되는 작업이 완료된 것은 아니며, 호출하는 메서드가 호출되는 메서드 쪽에 작업 완료 여부를 계속 문의한다.

     

    • 성능과 자원의 효율적 사용 관점에서 가장 유리한 모델은 Async-NonBlocking 모델이다.

     

     

     

      3.  Blocking  &  Asynchronous

     

    Blocking-Async는 별다른 장점이 없어서 일부러 사용할 필요는 없지만,

     

    NonBlocking-Async 방식을 쓰는데

    그 과정 중에 하나라도 Blocking으로 동작하는 놈이 포함되어 있다면 의도하지 않게 Blocking-Async로 동작할 수 있다.

    댓글

Designed by Tistory.