EunHee-Jeong/TIL

Blocking vs Non-Blocking / Sync vs Async

Closed this issue · 0 comments

입・출력 모델 (I/O Model)

동기식 입출력 (Syncronous I/O)

  • 프로그램이 I/O 요청 → 해당 task 완료 → 다음 task 진행

  • 자세한 과정

    1. I/O 진행 중

      • process (= program) → 다음 task를 수행하지 않고, 기다림 ⇒ blocked state
    2. I/O 완료

      • process → interrrupt 로 완료 여부를 알리고 → 기존의 process에게 CPU 제어권을 넘김
        • interrupt란?

          OS에서 컴퓨터에 예기치 않은 일이 발생하더라도, 작동을 중단하지 않고 계속 프로그램을 실행하는 것 . ..

    3. blocked-process → wait 상태로 회귀

  • 특징

    1. 명령의 수행 속도가 빠름

    2. I/O가 느림

      • wait 과정에서 자원이 낭비되기 때문
      • 원래는 CPU가 입출력이 진행되는 동안에 다른 프로세스에게로 작업을 돌린다고 한다 . . .
    3. I/O 요청 동기화

      • 여러 프로세스가 동시에 입출력 요청 ⇒ Queue에 넣어 순차적으로 처리

비동기식 입출력 (Non-syncronous I/O = Asyncronous I/O)

  • CPU의 process 제어권을 → I/O 연산을 호출한 process에게 곧바로 재부여

    • I/O 결과(= 순서)에는 관계 없는 연산에 주로 사용한다.

      • CPU가 I/O의 결과에 상관하지 않고, 작업이 가능한 task부터 처리하기 때문이다.

    → I/O 연산 종료 → interrupt로 알림

블로킹 입출력 (Blocking I/O)

  • 직접 제어할 수 없는 process들 → task가 완료될 때까지 기다리는 것을 말한다.

    • task가 완료되어야 CPU의 제어권을 다음 process로 넘길 수 있다 . . .
  • 동기식 입출력과 비슷하게, 자원이 낭비될 수 있다.

논블로킹 입출력 (Non-blocking I/O)

  • I/O 진행 중에도 process의 task를 중단하지 않는다!!

    • 즉 제어권을 곧바로 반납한다!!
  • I/O과 상관없이 task의 처리 결과를 반환하기 때문에 프로세스들이 대기할 필요가 없다.

  • 하지만 I/O 완료 여부는 확인이 필요하다고 한다. (시스템 호출이 반복된다는 소리이다...)


정리

  1. 동기/비동기는 블로킹/논블로킹의 개선된 입출력 이벤트 통지 모델인 셈이다.
  2. 동기/비동기는 제어권 반환 시점에 초점을 두고,
  3. 블로킹/논블로킹은 제어권 자체에 초점을 둔다는 차이가 있다.