back-end study

Blocking / Non-blocking 과 Sync / Async 의 차이

코앤미 2023. 6. 8. 13:54

 

동기와 비동기

  • 동기(Synchronous, 동시에 발생)
    • 동시에 일어난다는 의미이다. 즉, 요청과 그 결과가 동시에 일어난다는 약속을 의미한다.
    • 요청을 하면, 시간이 얼마나 걸리든 상관없이 요청한 자리에서 결과가 주어져야 한다.
    • 요청과 결과가 모두 한 자리에서 동시에 일어나게 된다.
    • 여러 노드 사이의 작업 처리 단위를 동시에 맞추겠다는 의도를 포함하고 있다.
    • 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 존재한다.
  • 비동기(Asynchronous, 동시에 발생하지 않는)
    • 동시에 일어나지 않음을 의미한다. 즉, 요청과 결과가 동시에 일어나지 않는다는 약속을 의미한다.
    • 요청한 그 자리에서 결과가 주어지지 않는다.
    • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
    • 비동기 방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 오래 걸려도 그 시간 동안 다른 작업들을 할 수 있으므로 자원을 효율적으로 사용할 수 있다는 장점이 존재한다.

블로킹과 논블로킹

  • 블로킹(Blocking, 타 작업 수행 차단)
    • 특정 작업이 실행 요청을 받아서 실행하는 동안 다른 작업은 진행하지 못하고 대기하는 방식을 의미한다.
    • 제어권이 호출된 함수에게 넘어가서 호출된 함수 내에서 작업이 모두 끝난 후 값이 리턴되고, 호출한 함수에게 다시 제어권이 넘어온다.
    • 작업이 순차적으로 이루어지므로 작업 흐름을 쉽게 이해할 수 있다는 장점이 있다,
    • 블로킹이 이루어지는 동안 하드웨어 리소스를 효율적으로 이용하지 못한다는 단점이 있고, 특히 블로킹이 일어나는 작업이 오래 걸리는 작업인 경우에 이러한 단점은 더욱 부각된다.
  • 논 블로킹(Non-Blocking, 타 작업 수행 허용)
    • 특정 작업이 이미 수행중이여도, 그것과 상관없이 바로 다른 작업을 수행 시키는 방식을 의미한다.
    • 제어권은 계속 호출한 함수에 있고, 값의 리턴이 함수의 실행과 동시에 이루어진다.
    • 리소스가 낭비되는 시간이 없으므로, 하드웨어 리소스를 효율적으로 이용할 수 있다.
    • 작업 흐름이 복잡해져서 이해가 쉽지 않다는 단점이 있다.

 

즉, async- non Blocking. <> sync - Blocking은 엄연히 다른 개념이다.

 

따라서 이론적으로 아래와 같이 4개의 조합으로 사용 가능하다.

async (non Blocking, Blocking)

sync (non Blocking, Blocking)

 

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

Sync-Blocking 모델과 Async-Nonblocking 모델은 자주 쓰이는 케이스 이다.

각각 안정성, 그리고 속도적인 이점이 존재한다.

 

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

 

Non-blocking : A 함수가 B 함수를 호출 한 뒤, B 함수가 A 함수에게 제어권을 바로 돌려준다.
Synchronous : A 함수가 B 함수를 호출 할 때, B 함수의 결과를 A 함수가 처리하는 것.


조합해보면 B 함수가 바로 제어권을 돌려주기에 A 함수는 다른 작업을 수행할 수 있지만,
언제 종료되는지 알 수 없는 B 함수의 종료를 A 함수가 처리해야 한다.
A 함수가 직접 결과를 처리해야하는 상황이기에 B 함수의 종료를 반복적으로 물어봐야 한다.

 

 

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

매우 비효율적이고 드문 케이스이다. 자세히 알 필요는 없다.