I/O 모델
- Application에서 I/O 작업을 할 수 없어, Kernal(OS) 에게 I/O 작업을 요청해야 한다
- 이때 Block 되어있는 시간동안 CPU가 낭비되기 때문에 이 부분을 개선하기 위해 필요함
동기 (Synchronous)
- 작업을 요청한 후 결과가 나올 때까지 기다림
- Blocking
- I/O가 끝날 때까지 대기하게 됨
- 유저 프로세스는 작업을 중단하고 대기함
- CPU를 쓰고 있지 않기 때문에 CPU 자원 낭비가 심함
Non-Blocking
- 방식. 유저 프로세스의 작업을 중단하지 않음
- 커널에서는 함수 진행과 관계없이 결과를 바로 반환 (반환할 수 있는 순간 가져올 수 있는 데이터. 계속해서 데이터를 받아오는 것)
- 클라이언트가 원하는 값이 되었는지 계속해서 확인해야 한다는 단점. CPU 부하 발생 가능
비동기(ASynchronous)
- 이벤트 통지 모델. Non-Blocking 방식이 CPU 부하를 가져오므로, 이를 해결하기 위해 고안
- 데이터가 준비되면 콜백, 이벤트를 발생시켜 애플리케이션에 알리기 Notify
- 작업을 요청하고 다른 일을 하다가 작업이 완료되면 그때 나머지 작업을 처리함 (IO 작업이 끝나면 Handler를 사용해 처리)
동기 vs 비동기
- 시스템 콜의 완료를 기다리면 동기, 아니면 비동기
Non-Blocking vs 비동기
- 계속해서 데이터 값을 체크하면 Non-Blocking
Blocking vs Non-Blocking
- 대기큐에 들어가서 시스템 콜이 끝나고 응답하면 Blocking
동기 vs Blocking
참고
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#동기와-비동기의-차이
https://asfirstalways.tistory.com/348