CS/운영체제
[동기, 비동기] X [블로킹, 논블로킹]
qbang
2021. 10. 4. 02:30
동기(Synchronous)
개념
두 개 이상의 프로세스가 실행될 때 시스템 콜의 완료를 기다리는 것을 의미한다.예를 들어 A코드와 B코드가 있을 때, A 코드가 모두 진행될 때까지 B 코드가 대기하는 것이다.
특징
- 데이터를 주고 받는 순서가 중요할 때 사용
- 한 작업에 대한 시간이 길어질 경우, 전체 응답이 지연될 수 있음
비동기(Asynchronous)
개념
두 개 이상의 프로세스가 실행될 때 시스템 콜의 완료를 기다리지 않는 것을 의미한다.예를 들어 A코드와 B코드가 있을 때, A 코드가 모두 진행될 때까지 기다리지 않고 B 코드가 실행되는 것이다.
특징
- 요청 순서에 상관없이 동시에 다수의 작업을 처리 가능
- 작업이 끝날 때 이벤트를 감지하고 결과를 받아서 추가 작업을 해주는 경우도 있기 때문에, 동기 방식에 비해 비교적 느릴 수도 있음
- I/O 작업이 잦거나 빠른 응답속도를 요구하는 프로그램에 적합
블로킹(Blocking)과 논블로킹(Non-blocking)
(동기 + 비동기)는 호출되는 함수의 완료를 호출한 쪽에서 확인하는가(동기), 호출받은 쪽에서 확인하는가(비동기)의 차이이고,
(블로킹 + 논블로킹)은 호출받은 쪽이 호출한 쪽에 제어권을 넘겨주지 않는 것이 블로킹이고, 넘겨주는 것이 논블로킹이다.
예를 들어 부모 프로세스에서 1번 자식 프로세스와 2번 자식 프로세스를 호출한다고 했을 때, (동기 + 비동기) 관점에서 보면 자식 프로세스가 완료되었는지 부모 프로세스 쪽에서 확인하는 것이 동기이고, 확인하지 않는 것이 비동기이다. (블로킹 + 논블로킹) 관점에서보면 자식 프로세스가 자신이 실행되는 동안 부모 프로세스에 제어권을 넘겨주지 않는 것이 블로킹이고, 제어권을 넘겨주는 것이 논블로킹이다.
네 가지 조합
각 키워드를 조합해보면 아래와 같은 4가지 상태가 나온다.
Sync & Blocking | Async & Blocking |
Sync & Non-Blocking | Async & Non-Blocking |
- Sync & Blocking: 함수를 호출하면 호출 받은 쪽에서 제어권을 가지고 있기 때문에 결과값이 반환될 때까지 다음 동작을 수행하지 않는다.
- Sync & Non-Blocking: 함수가 완료되지 않아도 제어권은 넘겨주기 때문에 호출한 쪽에서 다음 동작을 수행할 수는 있지만 함수가 완료되는지 주기적으로 확인해야 한다.
- Async & Blocking: 작업 완료 여부를 호출된 쪽에서 확인하고 제어권도 호출된 쪽에서 가지고 있다.
- Async & Non-Blocking: 함수를 호출하면 제어권을 다시 호출한 쪽으로 넘겨주어 다음 동작을 이어나가면서 호출된 함수의 결과를 알아서 돌려준다.