[ CS / OS ] Blocking VS Non-blocking / Sync VS Async

황승환·2022년 5월 25일
0

CS

목록 보기
48/60

이번에 신한은행 1차 면접에서 Blocking과 Non-blocking의 차이를 설명해보라는 질문이 나왔다. 정말 기초적인 부분이지만, 놓치고 있었던 부분이었고, 이 부분에 대해 설명드리지 못해 너무나 아쉬웠다. 기초적이지만 놓치고 있었던 부분을 하나하나씩 찾아보며 공부해보려 한다.

Blocking VS Non-blocking / Sync VS Async


우선 Blocking, Non-blocking과 Sync, Async는 관점부터 다른 개념이다. 그러나 잘 헷갈리는 개념들이기에 묶어서 한번에 알아보았다.

Blocking VS Non-blocking

Blocking과 Non-blocking은 실행의 제어권에 관점을 둔 개념이다. 다시 말해서 함수가 바로 return하는지의 여부에 관점을 둔다.

Blocking

A함수가 B함수를 호출하면, B함수에 제어권이 부여되고, B함수가 종료될 때까지 제어권을 가진다. 이렇게 되면 A함수는 B함수가 실행되는 동안 제어권이 없으므로 B함수의 종료를 기다리게 된다.

Non-blocking

A함수가 B함수를 호출하면, 호출함과 거의 동시에 제어권을 다시 A함수가 가져온다. 이렇게 되면 B함수가 실행되는 동안에도 A함수가 다른 일을 할 수 있게 된다.

Sync VS Async

Sync와 Async는 작업 완료의 주체에 관점을 둔 개념이다. 다시 말해서 함수의 작업 완료 여부를 누가 신경쓰는지에 대해 관점을 둔다.

Synchronous

A함수가 B함수를 호출하면, B함수의 결과를 A함수가 처리하는 것이다. 이는 작업 요청에 대한 결과값을 직접 받는 것이다. 그래서 결과값과 return값이 동일하다.

Asynchronous

A함수가 B함수를 호출하면, B함수의 결과를 B함수가 처리하는 것(call back)이다. 이는 A함수가 B함수의 작업을 시작시키고, 완료를 기다리지 않고 다른 일을 처리할 수 있게 된다. 그래서 결과값과 return값이 동일하지 않을 수도 있다.

Blocking/Non-blocking & Sync/Async

이 두 개념이 함께 적용되는 경우들을 살펴보았다.

Blocking+Synchronous & Non-blocking+Asynchronous

Blocking+Synchronous

Blocking이기 때문에 호출한 시점에서부터는 파란 실행은 다른 일을 하지 못하고 대기해야 한다. 대기가 끝나면 Synchronous이기 때문에 파란 실행이 초록 실행의 return값을 받아 결과값으로 반환한다.

Non-blocking+Asynchronous

Non-blocking이기 때문에 호출을 해도 파란 실행은 다른 일을 수행할 수 있다. Asynchronous이기 때문에 초록 실행이 수행을 완료하면 call back을 통해 return값을 별도로 전달한다.

Non-blocking+Synchronous


Non-blocking이기 때문에 호출을 해도 파란 실행은 다른 일을 수행할 수 있다. 그러나 Synchronous이기 때문에 파란 실행이 초록 실행의 return값을 받아 결과값으로 반환해야 한다. 그러나 초록 실행의 종료 시점을 모르기 때문에 반복적으로 완료확인을 하고, 완료가 확인되면 이 값을 결과값으로 반환한다.

Blocking+Asynchronous


Blocking이기 때문에 호출한 시점에서부터는 파란 실행은 다른 일을 하지 못하고 대기해야 한다. Asynchronous이기 때문에 초록 실행은 자신의 종료를 자신이 처리하고, call back을 호출하면, 파란 실행이 다른 일을 수행할 수 있게 된다.

정리

Blocking/Non-blocking은 수행의 제어권에 관점을 둔 개념으로, Blocking은 수행의 제어권을 호출한 함수에 넘겨주는 방식이기 때문에 호출한 함수의 종료까지 다른일을 수행하지 못하고 기다리게 된다. Non-blocking은 수행의 제어권을 호출한 함수에 넘겨주자마자 다시 받아내는 방식이기 때문에 호출한 함수와 상관없이 자신의 다른일을 수행할 수 있다.

Sync/Async는 수행의 종료의 처리 주체에 관점을 둔 개념으로, Sync는 호출한 함수가 호출된 함수의 종료를 처리하는 방식이기 때문에 호출한 함수의 return값을 받아 결과값으로 처리한다. Async는 호출된 함수가 자기 자신의 종료를 처리하는 방식이기 때문에 자신의 종료를 call back을 통해 알리고, 별도로 값을 return한다. 이 때문에 호출한 함수의 결과값과 호출된 함수의 return값이 다를 수 있다.

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글