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

blocking, non-blocking, Sync, Async

by yhsim98 2022. 8. 27.

블로킹과 논블로킹은 프로세스의 유휴 상태에 대한 개념이라면, 동기와 비동기는 프로세스의 수행 순서 보장에 대한 매커니즘이다.

  • 제어권
    • 제어권은 자신의 코드를 실행할 권리같은 것
    • 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다
  • 결과값을 기다린다는 것
    • A함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부

Blocking과 Non-blocking

A함수가 B 함수를 호출했을 때, 제어권을 어떻게 처리하느냐에 따라 달라진다.

Blocking

  • A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다
  • 제어권을 받은 B는 함수를 실행하고, A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다
  • B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다

Non-Blocking

A가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는다

Synchronous(동기)와 Asynchronous(비동기)

동기와 비동기의 차이는 호출되는 함수의 작업 완료 여부를 신경쓰는지의 여부의 차이

동기

작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함

함수 A가 함수 B를 호출한 후, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것

비동기

시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음

함수 A가 함수 B를 호출할 때, 콜백 함수를 함께 전달해서, 함수 B의 작업이 완료되면 콜백 함수를 실행한다.

함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다

블로킹과 논블로킹, 동기와 비동기 비교

Sync-Blocking

함수 A는 함수 B의 리턴값을 필요로 하고(동기), 그래서 제어권을 함수 B에게 넘겨주고, 함수 B가 실행을 완료하여 리턴값과 제어권을 돌려줄 때까지 기다린다.(블로킹)

  • EX) C나 JAVA의 코드 실행 후 커맨드에서 입력 받기
    • 제어권이 시스템에서 사용자로 넘어가, 리턴값을 필요로 해서 사용자 입력을 기다림

Sync-Nonblocking

A는 제어권을 넘기지는 않지만 함수 B의 리턴값은 필요하기 때문에 B의 완료 여부를 꾸준히 확인한다

  • EX) 게임에서 데이터 로드율을 표시
    • 맵을 이동할 때 맵 데이터를 게속 물어봄, 제어권은 여전히 사용자에게 있어 화면에 로드율이 표시됨
    • 논블로킹으로 자신의 작업을 계속하고 있지만, 다른 작업과의 동기를 위해 계속해서 다른 작업이 끝났는지 조회

Async-Nonblocking

  • 제어권을 B 함수에 주지 않고, 자신이 게속 가지고 있는다(논블로킹). 따라서 B 함수를 호출한 이후에도 멈추지 않고 자신의 코드를 게속 실행한다.

  • 그리고 B 함수를 호출할 때 콜백함수를 함께 준다. B 함수는 자신의 작업이 끝나면 A함수가 준 콜백 함수를 실행한다

  • 자바스크립트에서 API 요청을 하고 다른 작업을 처리하다가 콜백을 통해서 추가적인 작업을 할 때 사용함

  • Async-blocking

  • B 함수의 리턴값에 신경쓰지 않고, 콜백함수를 보낸다. 하지만 제어권도 넘겨 아무것도 하지 않는다.

  • EX) AJAX 요청 / JS 비동기 콜백

    • 프론트 단에서 서버로 API 요청을 보내고, 응답을 기다리지 않고 바로 자신의 다음 일을 게속 실행

Reference

https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0
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

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

가상 메모리  (0) 2022.08.14
메인 메모리 관리  (0) 2022.08.14
Deadlock  (0) 2022.08.04
프로세스 동기화  (0) 2022.07.29
CPU Scheduling  (0) 2022.07.24