이론공부/운영체제

블록킹/논블록킹, 동기/비동기

멍토 2021. 8. 23.

면접에서 자주나오는 질문중 하나이다.

또한 서비스를 만들다보면 해당 개념을 가지고 처리를 하는 경우가 생긴다.

비슷하면서도 비슷하지 않은 두개때문에 헷갈릴때가 많다.

 

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 : 순서 혹은 결과 처리의 관점

 

출처 : https://www.youtube.com/watch?v=oEIoqGd-Sns&t=48s

댓글

💲 광고입니다.