운영체제

Sync/Async & Blocking/Non-Blocking

rnrwk0502 2024. 9. 1. 00:07
  • Synchronous : 요청이 들어온 순서에 맞게 하나씩 처리하는 것
  • Asynchronous : 하나의 요청이 끝나기 전에, 다른 요청을 동시에 처리할 수 있는 것
  • Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
  • NonBlocking : 다른 추제의 작업에 관련없이 자신의 작업을 하는 것

 

동기(Synchronous), 비동기(Asynchronous)

둘의 차이는 한 작업이 다른 작업을 호출하는 경우, 호출되는 것의 작업 완료 여부를 누가 신경쓰는 지에 따라 나뉜다.

 

Synchronous는 호출하는 함수가 작업 완료 여부를 확인한다. 

Synchronous의 뜻은 '동시 발생하는'으로 컴퓨터 공학에서 동기는 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나는 것이다.

  • 작업1이 프로세스를 수행하는 동안 다른 작업은 실행되지 않고 작업1이 끝날 때까지 기다린다.
  • 작업1이 모든 프로세스를 끝낸 경우 다른 작업을 실행한다.
  • 작업의 수행 결과 및 종료를 작업1이 신경쓰고 끝난 경우 작업2를 호출해 작업을 하라고 알려준다.

Asynchronous는 호출하는 함수가 작업 완료 여부를 신경쓰지 않는다. 

Asynchronous의 뜻은 '동시 발생하지 않는'으로 컴퓨터 공학에서 동기는 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나지 않는 것이다.

  • 동기와는 다르게 작업1이 프로세스를 수행할 때 작업2도 동시에 프로세스를 수행할 수 있다.
  • 작업은 로직이 완료되었는지 혼자 신경쓰고, 처리한다.

 

Blocking, NonBlocking

한 작업이 다른 작업을 호출하는 경우, 호출되는 함수가 바로 리턴을 하는지 여부에 따라 나뉜다. 누구한테 제어권(작업을 할 권리)가 있는지가 관건이다.

 

Blocking은 다른 함수가 작업을 하지 못하도록 제어권을 계속 가지고 있는 것이다. 제어권은 호출된 함수에게 있다.

  • 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고, 호출한 함수에게 바로 돌려주지 않는다.
  • 호출한 함수는 호출된 함수가 작업을 모두 마칠 때까지 계속 대기
  • return값을 받아야 다음 작업을 할 수 있다.
  • 스레드 관점으로 보면, 요청한 작업을 마칠 때까지 계속 대기하면 return값을 받을 때까지 한 스레드를 계속 사용/대기

NonBlocking은 Blocking과 반대의 개념을 가지고 있으며, 호출된 함수가 자신의 할 일을 마지치 않아도 바로 제어권을 반환해주는 것이다. 제어권은 호출한 함수에게 있다.

  • 호출된 함수가 자신의 할 일을 마치지 않았더라도 바로 제어권을 return해주어 호출한 함수가 다른 일을 진행할 수 있도록 해준다.
  • 요청한 작업을 즉시 마칠 수 없다면 즉시 return한다.
  • 스레드 관점에서 보면, 하나의 스레드가 여러 개의 I/O 처리가 가능하다.

 

1. Synchronous + Blocking

  • 호출하는 함수는 호출된 함수의 작업 완료/리턴을 계속 기다린다.
  • 호출된 함수는 자신의 완료되면 리턴한다.

따라서 호출한 함수는 함수를 호출한 후, 리턴을 받기 전까지 다른 일을 하지 않고 대기한다.

 

2. Synchronous + NonBlocking

  • 호출하는 함수는 호출된 함수의 작업 완료/리턴을 계속 기다린다.
  • 호출된 함수는 호출되면  바로 리턴한다.

따라서 호출한 함수는 호출 이후 제어권을 바로 받기 때문에 작업을 계속하면서, 호출했던 함수의 작업 완료를 주기적으로 확인한다.

 

3. Asynchronous + Blocking

  • 호출하는 함수는 호출된 함수의 작업 완료/리턴을 기다리지 않는다.
  • 호출된 함수는 자신의 완료되면 리턴한다.

호출한 함수는 호출된 함수의 리턴을 기다리지 않지만, 호출된 함수가 자신의 작업이 끝날 때까지 제어권을 넘겨주지 않기 때문에 호출한 함수는 의도치 않게 호출된 함수의 작업이 완료될 때까지 대기하게 된다. Sync-Blocking과 유사하게 동작하지만 별다른 이점이 없다.

 

4. Asynchronous + NonBlocking

  • 호출하는 함수는 호출된 함수의 작업 완료/리턴을 기다리지 않는다.
  • 호출된 함수는 호출되면 리턴한다.

제어권이 넘어가지 않았고, 순서대로 진행되지 않아도 되기 때문에 호출하고 작업을 하고 있다가 완료 시 콜백한다.

 

 

 

 

좀 복잡해 보일 수 있지만 각 특성을 이해하고 머릿속에서 조합해본다면 암기하지 않아도 이해할 수 있다.

글로만 이해가 잘 안된다면 밑에 영상을 참고하자!

https://www.youtube.com/watch?v=oEIoqGd-Sns

 

 

출처

https://velog.io/@soyeon207/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0-blocking-non-blocking

 

[OS] 동기 / 비동기, blocking / non-blocking

개발을 하다보면 동기, 비동기라는 말에 대해서 많이 듣게 된다.하지만 들을 떄마다 그게 뭐더라 ... 하고 개념을 혼동하거나 헷갈릴 때가 진짜 너무너무 많다. 그래서 알아보기로 했다.

velog.io

https://steady-coding.tistory.com/531#google_vignette

 

[운영체제] Blocking, Non-blocking & Synchronous, Asynchronous

cs-study에서 스터디를 진행하고 있습니다. 기본 개념 Blocking 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것 NonBlocking 다

steady-coding.tistory.com

 

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

물리 메모리 / 가상 메모리  (0) 2024.10.05
Docker & 가상화  (0) 2024.09.13
상호 배제 / 동기화 (Mutex, Semaphore, Monitor)  (0) 2024.09.01
교착상태 / 기아상태  (0) 2024.08.17
경쟁상태(Race Condition)  (0) 2024.08.17