Computer-Sience/OS

[OS] Sync / Async / Blocking / Non-Blocking

dev_ss 2023. 2. 8. 01:51

프로그래밍을 시작한 사람들 중 동기 및 비동기에 대하여 많이 접해봤을 것이다.

 

Syncronous (동기) :동시 발생[존재]하는

Asynchronous(비동기) : 동시에 존재[발생] 하지 않는

 

이라는 단어의 뜻을 가지고 있으며, 단어만 보았을 때에는 이해가 바로 되지 않을 수 있다.


동기와 비동기는 특정 작업들이 있을 때, 작업 완료의 여부와 관련된 순서에 관한 것이고,

유사하지만 다른 개념인 Blocking / Non-block도 같이 알아볼 것이다.


 

Blocking/Non-blocking : 프로세스의 유휴 상태(제어권)에 관한 것

 - Blocking : 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수가 제어권 없이 대기

 - Non-blocking : 호출된 함수가 리턴 후 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 작업을 실시

 

Sync/Async :  프로세스의 작업 순서 보장에 관한 것

 - Sync :호출되는 함수의 리턴의 여부와 관계 없이 호출되는 함수의 작업 완료를 호출 후 완료 시 작업 실시

 - Async :호출되는 함수에게 callback을 전달 후 작업이 완료되면 호출되는 함수가 받은 callback을 실행

 

서로 다른 개념이기 때문에 다음과 같이 총 4가지의 경우의 수가 나올 수 있다.

  • Blocking - Sync
  • Non-blocking - Sync
  • Blocking - Async
  • Non-blocking - Async

다음의 예시를 보며 하나씩 알아보자

 

1. Blocking - Sync :

Blocking - Sync의 예시

호출된 함수에게 제어권을 위임하여 종료될 때까지 대기를 한다.

 

2. Non-blocking - Sync :

Non blocking - Sync의 예시

호출된 함수가 빠르게 제어권을 반환하고 반복적으로 호출된 함수가 종료가 되었는지 호출을 한다.

 

3. Blocking - Async : 

Blocking - Async의 예시

호출을 할 때 Callback 함수를 제어권과 함께 전송하여 Callback 호출이 이루어질때까지 대기한다.

4. Non-blocking - Async : 

Non blocking - Async의 예시

호출을 할 때 Callback 함수를 동봉하고 제어권은 호출한 함수가 가지고 있으며,

Callback 호출이 이루어지는 함수들부터 작용한다.

 


결국 비슷해 보이지만, 제어권의 주체 및 Callback함수와 그 순서에 따라

함수의 결과를 반환하는 순서가 나뉘는 것이고, Sync/Async와 Blocking/Non-blocking은

확실하게 다른 개념이라고 볼 수 있는 것이다.

반응형