눈송이의 개발생활

[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous) 본문

Computer Science/Operating System

[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous)

꾸지새미언니

🗝️ 개념 및 키워드

  • 제어권 : 코드 실행 권리. 제어권을 가지면 코드를 실행한 후 자신을 호출한 함수에게 돌려줌
  • 결과값 기다리는 것 : A함수가 B함수를 호출했을 때, B의 결과를 기다리는지의 여부
  • Blocking : 자신의 작업을 하다가 다른 주체가 작업을 시작하면 끝났때까지 기다렸다가 다시 자신의 작업 시작하는 것
  • Non-Blocking : 다른 주체의 작업에 관련없이 작업을 수행하는 것
  • Synchronous : 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작
  • Asynchronous : 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음

 

블로킹(Blocking) / 논블로킹(Non-Blocking)

  • 제어권에 대한 것
  • 프로세스의 유휴 상태에 대한 개념
  • 처리되어야 하는 하나의 작업이 전체적인 작업의 흐름을 막느냐 안막느냐에 대한 관점
  • A가 B함수를 호출했을 때, 제어권을 어떻게 처리하느냐에 따라 블로킹/논블로킹 나눠짐

🚩 블로킹(Blocking)

  1. A 함수가 B 함수를 호출하면 제어권을 B에 넘겨줌
  2. A는 제어권이 없기 때문에 B가 실행될 동안 멈춤
  3. B가 실행이 끝나면 제어권을 A에게 돌려줌

🚩 논블로킹(Non-Blocking)

  1. A가 B를 호출하면 B는 실행되지만 제어권은 계속 A가 갖고 있음
  2. A는 B를 호출한 이후에도 계속 자신의 코드 실행
  3. A와 B 모두 함수 실행

 

동기(Synchronous) / 비동기(Asynchronous)

  • 시간에 대한 것
  • 프로세스의 수행 순서 보장에 대한 매커니즘
  • 처리해야 할 작업들을 어떤 흐름으로 처리할 것인지에 대한 관점
  • 호출되는 함수의 작업 완료 여부를 신경쓰느냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐에 따라 동기/비동기로 나눠짐

🚩 동기(Synchronous)

  • 요청과 그 결과가 동시에 일어남(요청자 입장에서)
  • 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 함
  • 결과가 미완료 상태면 작업 완료 여부를 스스로 계속 확인하고 신경 씀
  • A 노드와 B 노드 사이의 작업 처리 단위(transaction)을 동시에 맞춤
  • 같은 일을 동시에 진행 (ex. A에서는 돈 빠지고 B에는 돈 들어오는 행위 → 계좌이체)
장점 단점
설계가 매우 간단하고 직관적 결과가 주어질 때까지 대기해야 함

 

🚩 비동기(Asynchronous)

  • 요청과 결과가 동시에 일어나지 않음(요청자 입장에서)
  • A가 B를 호출한 수 B의 작업 완료 여부에는 신경쓰지 않음
  • A가 B를 호출할 때 콜백 함수 함께 전달
    • B 작업 끝나면 콜백 함수 실행 (결과 스스로 요청자에게 알려줌)
  • 노드 사이의 작업 처리 단위(transaction)을 동시에 맞추지 않음
  • 노드의 행위(목적)이 다른 경우 → 작업 처리 시간이 일치하지 않아도 되기 때문에 비동기
장점 단점
결과가 주어지는데 시간이 걸려도 그동안 다른 작업을 할 수 있어서 효율적 동기보다 복잡

 

 

블로킹, 논블로킹, 동기, 비동기 조합

출처 : https://www.inflearn.com/news/72620

1️⃣ Sync-Blocking

  • A는 B의 리턴값 필요 (동기)
  • 제어권을 B에 넘김
  • B 완료되서 제어권과 결과값 기다릴 때까지 대기 (블로킹)
💡 요청받은 함수의 작업이 끝나야 제어권 돌려 받음(블로킹) + 요청자는 계속 결과 확인(동기)

 

2️⃣ Sync-Nonblocking

  • A가 B를 호출하고 제어권을 주지 않고 자신의 코드 실행 (논블로킹)
  • A는 B의 리턴값이 필요하기 때문에 중간중간 B의 진행상황을 물어봄 (동기)
💡 제어권 바로 돌려줌(논블로킹) + 요청자는 계속 결과 확인(동기)

 

3️⃣ Async-Nonblocking

  • A는 B는 호출하고 제어권을 계속 갖고 있음 (논블로킹)
  • B를 호출하면서 콜백 함수를 함께 전달
  • B는 실행이 끝나면 콜백함수를 실행 (비동기)
💡 제어권 바로 돌려줌(논블로킹) + 결과는 요청받은 함수가 알아서 알려줌(비동기)

 

4️⃣ Async-Blocking

  • 잘 없는 경우
  • A는 B의 리턴값을 생각하지 않고 콜백함수 보냄 (비동기)
  • 관심이 없는데도 제어권 전달 (블로킹)
  • A는 관련없는 B의 작업이 끝날때까지 기다렸다가 제어권을 받아서 다시 실행해야함



 

참조
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC
https://steady-coding.tistory.com/531

Comments