면접에서 자주나오는 질문중 하나이다.
또한 서비스를 만들다보면 해당 개념을 가지고 처리를 하는 경우가 생긴다.
비슷하면서도 비슷하지 않은 두개때문에 헷갈릴때가 많다.
Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것
Synchronous : 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작
Asynchronous : 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음
각각의 정의만 보면 매우 어렵다.
4가지 경우를 조합하여 각각의 상황을 확인해보자.
Blocking / Synchronous
블록킹이기 때문에 제어권이 상대방에게 넘어간다.
동기이기 때문에 결과를 반환받고 처리하게 된다.
ex) Java의 입력받기
Non-Blocking / Synchronous
논 블록킹이기 때문에 제어권은 자신에게 있다.
그렇지만 동기이기 때문에 상대방이 돌려주는 결과를 기다리게 된다.
따라서 작업을 하고있는 대상에게 작업이 끝났는지 요청해서 물어보게 된다.
ex) 게임에서 맵을 이동할때 현재 로드율을 표시
Blocking / Asynchronous
블록킹이기 때문에 제어권이 상대방에게 넘어간다.
그렇지만 비동기이기 때문에 결과는 바로 처리하지 않아도 무방하다.
비동기인데 굳이 블록킹을 써야할지 의문이 들 수 있다.
해당 방식은 넌블록킹으로 하려다가 실수하는 경우에 발생한다.
Non-Blocking / Asynchronous
넌블록킹이기 때문에 제어권은 자신이 가지고 있다.
비동기이기 때문에 결과에 관심이 없다.
따라서 요청 후 자신의 일을 처리하고 모든 일처리가 끝나게 된다면 돌아온 결과를 가지고 작업을 한다.
ex ) 프론트엔드의 JS에서 콜백요청
정리
Blocking / Non-Blocking : 제어의 관점
Synchronous / Asynchronous : 순서 혹은 결과 처리의 관점
'이론공부 > 운영체제' 카테고리의 다른 글
프로세스와 스레드, 프로그램의 차이점(운영체제,OS) (0) | 2020.04.26 |
---|
댓글