일반적으로 동기와 비동기의 차이는 메소드를 실행시킴과 동시에 반환 값이 기대되는 경우를 동기, 그렇지 않은 경우를 비동기라고 한다.
✔️ 동시에 ?
실행되었을 때 값이 반환되기 전까지는 blocking되어 있다는 것을 의미
작업을 요청한 후 해당 작업의 결과가 나올 때까지 기다린 후 처리하는 것으로 IO 작업에 대한 readiness를 기다림. 특정 IO작업을 하기 위한 준비가 되었는지에 집중하는 것
IO작업 준비에 대한 이벤트의 발생을 기다렸다가 해당 이벤트가 발생하면 그에 따른 적합한 처리를 함.
작업을 요청해놓고 딴 일을 하다가 해당 작업이 완료되면 그 때 완료되었음을 통지받고 그에 따른 작업을 처리하는 것을 말한다. completion을 기다리는 것. 운영체제 단계의 비동기 API를 통해 이루어지며 IO작업이 completion이 되면 그에 적합한 handler를 이용해 처리함
System call의 완료를 기다리면 sync
System call의 완료를 기다리지 않으면 async
IO작업을 처리하기 위해 시스템 함수를 호출함 ( = system call )
그래서 IO작업이 끝나고 데이터를 반환하면 스레드에 걸린 block이 풀림. 애플리케이션 관점에서 보면 아무런 동작도 안하는 것처럼 보이지만 실제로는 커널에서 IO작업을 수행하느라 block되어 있는 것임. 이 부분이 blocking 의 문제점
작업을 요청한 후 해당 작업의 결과가 나올 때까지 기다린 후 처리하는 것, Blocking은 IO가 끝날 때까지 대기해야 함
즉, 동기화 하기 위해 Blocking하는 것임
IO작업을 진행하는 동안 작업을 중단시키지 않는다. 시스템 콜을 하면 커널에서 함수의 진행 상황과 상관없이 결과를 바로 반환한다.
출처 : https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://asfirstalways.tistory.com/348