본문 바로가기

CS/면접을 위한 CS 전공노트

[네트워크] Blocking/Non-blocking & Synchronous/Asynchronous

반응형

http://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/%5BNetwork%5D%20Blocking%2CNon-blocking%20%26%20Synchronous%2CAsynchronous.md

 

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

Blocking/Non-blocking & Synchronous/Asynchronous을 쉬운 예제를 통해 설명한 글이 있어 해당 글을 읽고 정리해보자.

 

Blocking/Non-blocking

블럭/논블럭은 간단히 말해서 호출된 함수가 호출한 함수에게 제어권을 건네주는 유무의 차이라고 볼 수 있다.

함수 A, B가 있고, A 안에서 B를 호출했다고 가정해보자. 이때 호출한 함수는 A고, 호출된 함수는 B가 된다. 현재 B가 호출되면서 B는 자신의 일을 진행해야 한다(제어권이 B에게 주어진 상황).

Blocking : 함수 B는 본인 일을 다 마칠 때까지 제어권을 가지고 있는다. A는 B가 다 마칠 때까지 기다려야 한다.
Non-blocking : 함수 B는 일을 다 마치지 않았어도 A에게 제어권을 바로 넘겨준다. A는 B를 기다리면서 다른 일을 진행할 수 있다.

호출된 함수에서 일을 시작할 때 바로 제어권을 리턴해주느냐, 할 일을 마치고 리턴해주느냐에 따라 블럭과 논블럭으로 나누어진다고 볼 수 있다.

Synchronous/Asynchronous

동기/비동기는 일을 수행 중인 동시성에 주목하여 호출된 함수의 수행 결과나 종료 상태를 호출한 함수가 신경쓰는지에 대한 차이에 집중하면 된다.

아까와 같은 상황이라고 가정하자.

Synchronous : 함수 A는 함수 B가 일을 하는 중에 기다리면서, 현재 상태가 어떤지 계속 체크한다.
Asynchronous : 함수 B의 수행 상태를 B 혼자 직접 신경쓰면서 처리한다. (Callback)

즉, 호출된 함수(B)의 일 진행 여부를 호출한 함수(A)가 신경쓰는지, 호출된 함수(B) 스스로 신경쓰는지에 따라 동기/비동기를 나눈다고 생각하면 된다.

비동기는 호출시 Callback을 전달하여 작업의 완료 여부를 호출한 함수에게 답한다. 이를 통해 Callback이 오기 전까지 호출한 함수는 신경쓰지 않고 다른 일을 할 수 있다.

 

차이를 이해하기 쉽게 설명한 Case 별 예시가 있다. 이 예시를 보면 딱 감이 온다.

 

1. Blocking & Synchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (아 언제 되지?..궁금한데 그냥 멀뚱히 서서 치킨 튀기는거 보면서 기다림)

2. Blocking & Asynchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 앗 넹
-- 사장님 치킨 튀기는 중--
나 : (언제 되는지 안 궁금함, 잠시만 이라고해서 다 될때까지 서서 붙잡힌 상황)

2. Non-blocking & Synchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
(5분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요
(10분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠ
(15분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠㅠ

4. Non-blocking & Asynchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (앉아서 다른 일 하는 중)
...
사장님 : 치킨 나왔습니다
나 : 잘먹겠습니다~

 

예시 너무 귀엽다..누가 쓰신 건지 몰라도 이해도 쏙쏙 되면서 힐링되는 예시 ㅋㅋㅋㅋㅋ

반응형