Blocking/Non-blocking과 Synchronous/Asynchronous는 컴퓨팅과 프로그래밍에서 중요한 개념이다. 입력/출력(I/O) 작업을 처리하는 방식에서 차이를 보인다. 종종 혼동되지만 서로 다른 개념이다.
ㅇ 개념
Blocking과 Non-blocking은 다른 주체가 작업할 때 자신의 제어권이 있는지 없는지로 구분한다.
- Blocking
호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않는 상황을 말한다. - Non-blocking
호출된 함수가 자신이 할 일을 모두 마치지 않았더라도 바로 제어권을 건네주어 호출한 함수가 다른 일을 진행할 수 있도록 해주는 상황을 의미한다.
Sync와 Async는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 없는지로 판단한다.
- Sync
호출된 함수의 수행 결과 및 종료를 호출한 함수와 함께 신경 쓰는 경우를 의미한다. - Async
호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 쓰고 처리하는 경우를 의미한다.
ㅇ Blocking/Non-blocking과 Synchronous/Asynchronous의 조합
Sync - Blocking
Async - Nonblocking
위 그림은 우리가 평소 알고있는 기본적인 함수 호출방식과 비동기 방식이다.
익숙하지 않은 두 가지 방식을 더 살표본다.
Sync - Nonblocking
호출되는 함수(B) 결과를 처리하는대로 반환, B함수를 호출하고 제어권을 넘겨 받은 A함수는 다른 작업을 수행할 수 있지만, B함수의 결과를 처리해야하기 때문에 언제 종료되는지 알 수 없는 B함수의 종료를 반복적으로 물어봐야한다.
Async - Blocking
이 조합은 큰 이점이 없어 사용하지 않으나 의도치 않게 이 형태로 동작하는 경우가 있다고 한다.
호출한 함수(A)는 호출되는 함수(B)의 작업 결과에 관심이 없음에도 불구하고 B함수의 결과를 기다려야한다.
참고: https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/
'Network' 카테고리의 다른 글
[Network] API 게이트웨이, NAT 게이트웨이 (0) | 2024.12.07 |
---|---|
[Network] Web Socket (2) | 2024.12.07 |
CS 네트워크 로드밸런싱 (1) | 2024.10.17 |
CS 네트워크 TLS/SSL Handshake (0) | 2024.10.17 |
CS 네트워크 HTTP & HTTPS (0) | 2024.10.15 |