본문 바로가기
CS/운영체제

[동기, 비동기] X [블로킹, 논블로킹]

qbang 2021. 10. 4.

동기(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: 함수를 호출하면 제어권을 다시 호출한 쪽으로 넘겨주어 다음 동작을 이어나가면서 호출된 함수의 결과를 알아서 돌려준다.

 

참고

'CS > 운영체제' 카테고리의 다른 글

가상메모리와 페이지 교체 알고리즘  (0) 2022.06.13
데드락(Dead-lock)  (0) 2021.10.04
프로세스와 스레드  (0) 2021.09.24

댓글