개발기록

[OS] 동기,비동기..Blocking과 Non-Blocking 본문

운영체제

[OS] 동기,비동기..Blocking과 Non-Blocking

Danuvibe 2021. 6. 1. 16:36

'동기' == '블로킹', '비동기' == '논블로킹' 맞나? 아닌가? 헷갈려서 포스팅의 주제로 삼았다!

 

동기(synchronous) / 비동기(Asynchronous) 는 작업을 수행하는 주체가 2개 이상이어야 한다. 이때의 작업의 시작과 종료를 맞물리게 놔두면 이를 동기! 서로의 작업의 시간이 관계가 없다면 이를 비동기라고 한다! 

블로킹(Blocking) / 논블로킹(non-blocking)은 작업의 대상이 2개이상이어야 한다

 

# 동기(synchronous) / 비동기(Asynchronous)

 

동기 작업이란 작업을 수행하는 두 개 이상의 주체가 서로 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작할 때를 의미합니다. 시작과 종료를 동시에 하거나, 하나의 작업이 끝나는 동시에 다른 주체가 작업을 시작하면 이는 동기 작업이라고 볼 수 있습니다.

 

  • 요청과 결과가 한 자리에서 동시에 일어남
  • A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다.

 

비동기 작업은 두 주체가 서로의 시작, 종료시간과는 관계 없이 별도의 수행 시작/종료시간을 가지고 있을 때를 뜻합니다. 서로 다른 주체가 하는 작업이 자신의 작업 시작, 종료시간과는 관계가 없을 때 비동기라고 부를 수 있습니다.

 

  • 요청한 그 자리에서 결과가 주어지지 않음
  • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.

 

 

#

 

 

Blocking 과 Non-blocking은 주로 IO의 읽기, 쓰기에서 사용이 된다.

 

# Blocking

  • 요청한 작업이 끝날때 까지 계속 대기
  • retrun값을 받기전까지는 제어권을 계속 가지고 있다.
  • Thread관점에서 요청한 작업에 대한 return값을 받기전까지 해당 thread를 계속 사용/대기 한다.

# Non-blocking

  • 내 작업의 종료와는 관계없이 내 제어권을 호출한 함수에 넘겨준다.
  • 제어권을 넘겨받은 함수는 다른 일을 할 수 있는 기회를 얻는다.

# 동기/비동기, blocking/non-blocking 조합

blocking + Synchronous

결과가 처리되어 나올때까지 기다렸다가 return 값으로 결과를 전달한다.

 

non-blocking + Asynchronous

작업 요청을 받아서 별도의 프로세서에서 진행하게 하고 바로 return(작업 끝)한다.
결과는 별도의 작업 후 간접적으로 전달(callback)한다.

 

 

 

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

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

[OS] 동시성과 병렬성의 차이  (0) 2021.06.01
[OS] 경쟁상태(Race condition)란?  (0) 2021.06.01
[OS] Multi Threading, 동기화  (0) 2021.06.01
Comments