Blocking / Non-Blocking
Blocking과 Non-Blocking은 주로 멀티 스레딩, I/O 등에서 사용되는 개념이며, 함수의 리턴 시점과 제어권(함수를 실행할 권리)에 따라 차이가 난다. 각각 특징을 살펴보자.
Blocking
Blocking은 호출된 함수가 제어권을 넘겨주지 않아 호출한 함수 측에서는 다른 작업을 수행할 수 없고 제어권이 돌아오기만을 기다리는 것을 말한다. 즉 호출된 함수의 작업이 완료된 후 다시 작업을 이어갈 수 있다.

위 그림을 보면, 먼저 A 함수가 B 함수를 호출하면 B 함수에게 제어권을 넘긴다. 제어권을 넘겨받은 B 함수는 열심히 함수를 실행한다. 이때 A 함수는 실행을 잠시 멈춘다. 그리고 B 함수는 실행이 끝나면 A 함수에게 제어권을 돌려준다.
Non-Blocking
Non-Blocking은 호출한 함수가 제어권을 넘겨주지 않고 자신이 가지고 있는 것을 말한다. 그렇기 때문에 함수가 호출된 뒤에도 자신의 작업을 계속 이어간다.

위 그림을 보면, A 함수가 B 함수를 호출하면, B 함수가 실행되지만 제어권은 A 함수가 그대로 가지고 있다. 그렇기 때문에 B 함수를 호출한 뒤에도 A 함수는 실행을 멈추지 않고 작업을 계속 수행한다.
동기(Synchronous) / 비동기(Asynchronous)
동기와 비동기는 주로 어플리케이션에서 자주 다뤄지는 개념이며, 다음 작업이 요청되는 시간과 호출되는 함수의 작업 완료 여부를 신경 쓰는지의 여부와 관련되어 있다. 각각 특징을 살펴보자.
동기(Synchronous)
동기는 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청된다. 호출한 함수에서 호출된 함수가 결과를 반환할 때까지 기다리고, 호출된 함수의 작업 완료 여부를 계속해서 확인한다.

위 그림을 보면, Thread 1에서 Thread 2에게 Task를 보낸 경우, Thread 2가 해당 작업을 수행하는 동안 Thread 1은 Thread 2가 끝날 때까지 대기상태이다.
비동기(Asynchronous)
비동기는 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업이 요청된다. 호출한 함수에서 결과를 기다리지 않고, 콜백 함수에서 결과를 처리한다. 또한 호출된 함수의 작업 완료 여부를 확인하지 않는다.

위 그림을 보면, Thread 1에서 Thread 2에게 Task를 보낸 경우, Thread 1은 대기 없이 나머지 Task를 실행한다.
Reference
'운영체제' 카테고리의 다른 글
| [운영체제] Thread(3) - Multi Thread (0) | 2022.03.12 |
|---|---|
| [운영체제] Thread(2) - Thread 동기화 (0) | 2022.03.11 |
| [운영체제] Thread(1) - Thread란? (0) | 2022.03.10 |