Blocking vs Non-Blocking / Sync vs Async
Closed this issue · 0 comments
EunHee-Jeong commented
입・출력 모델 (I/O Model)
동기식 입출력 (Syncronous I/O)
-
프로그램이
I/O 요청
→ 해당task 완료
→ 다음 task 진행 -
자세한 과정
-
I/O 진행 중
process
(= program) → 다음 task를 수행하지 않고, 기다림 ⇒blocked state
-
I/O 완료
- process →
interrrupt
로 완료 여부를 알리고 → 기존의 process에게CPU 제어권
을 넘김-
interrupt란?
OS에서 컴퓨터에 예기치 않은 일이 발생하더라도, 작동을 중단하지 않고 계속 프로그램을 실행하는 것 . ..
-
- process →
-
blocked-process →
wait
상태로 회귀
-
-
특징
-
명령의 수행 속도가 빠름
-
I/O가 느림
- wait 과정에서 자원이 낭비되기 때문
- 원래는 CPU가 입출력이 진행되는 동안에 다른 프로세스에게로 작업을 돌린다고 한다 . . .
-
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 완료 여부는 확인이 필요하다고 한다. (시스템 호출이 반복된다는 소리이다...)
정리
- 동기/비동기는 블로킹/논블로킹의 개선된 입출력 이벤트 통지 모델인 셈이다.
- 동기/비동기는
제어권 반환 시점
에 초점을 두고, - 블로킹/논블로킹은
제어권 자체
에 초점을 둔다는 차이가 있다.