목차
- 들어가기
- 동기, 비동기, Blocking, Non-Blocking
- 동기
- 비동기
- Blocking
- Non-Blocking
- 결국
- 참고
들어가기
개발 공부하다 보면 동기, 비동기라는 단어가 여러 번 볼 수 있습니다. 그리고 Blocking, Non-Blocking도 종종 보이기도 합니다. 그런데 각 개념을 배우고 학습할 땐 문제 없이 이해가 되는데 막상 설명해 보면 동기랑 Blocking이 비슷한 것 같고, 비동기랑 Non-Blocking이 비슷하게 느껴집니다. 모르는 부분이 더 있는 듯 싶어서 정리 해보았습니다.
동기, 비동기, Blocking, Non-Blocking
동기
동기(Synchronous)란 작업이 순차적으로 진행되며 작업이 완료될 때까지 다른 작업은 대기합니다. 장점으로는 설계가 간단하며 순차적으로 진행되다보니 작업들의 결과 순서를 예상할 수 있습니다. 단점으로는 한번에 하나의 작업을 진행하므로 자원의 효율성이 떨어질 수 있습니다.
라면을 끓이는 상황으로 설명해보겠습니다. 여러 가지 조리법이 있지만, 아래와 같은 조리법으로 만들겠습니다.
- 물을 끓인다.
- 분말 스프와 후레이크(건더기)를 넣는다.
- 면을 넣는다.
- 5분을 기다린다.
이 조리법을 동기적으로 진행된다면 라면이 완성된다는 것을 우리는 예상할 수 있습니다. 하지만 조리법에 있는 각 단계를 병렬적으로 진행된다면 제대로 익지않은 라면이 될지도 모릅니다.
비동기
비동기(Asynchronous)란 작업이 병렬적으로 진행되며 작업이 완료되기를 기다리지 않고 다른 작업을 수행할 수 있습니다. 장점은 자원을 효율적으로 활용할 수 있습니다. 단점은 설계가 복잡하고 작업들이 어떤 순서로 완료될지 예상하기 어렵습니다.
식당에서 주문하고 요리가 나오는 상황을 예시로 설명해보겠습니다. 주문을 받은 홀 매니저는 주방 요리사에게 주문내역을 전달합니다. 빠른 서비스를 위해 요리사는 여러가지 요리를 병렬적으로 진행합니다. 그러다보니 홀 매니저는 어떤 요리부터 완성될지 모릅니다.
Blocking
Blocking 이란 호출자에게 요청 작업이 완료될 때까지 제어권을 반환하지 않는 방식입니다. 제어권을 받을 때까지 호출자는 대기 상태에 놓입니다. 장점은 구현이 간단하며 단점은 작업이 길어지는 경우 호출자는 계속 대기하게 됩니다.
사장님께 비서가 결재를 요청하는 상황으로 설명해보겠습니다. 사장님은 매우 권위적이며 전통적인 업무 절차를 중요시 합니다. 그래서 결재하는 동안에는 비서가 옆에서 기다려야합니다. 결국 결재를 요청하고 완료될때 까지 비서는 아무것도 못하고 대기하게 됩니다.
Non-Blocking
Non-Blocking 이란 호출자에게 작업 요청과 동시에 바로 제어권을 반환하는 방식입니다. 제어권을 받은 호출자는 바로 다른 작업을 진행할 수 있습니다. 장점은 대기 시간이 없다보니 효율적으로 작업을 진행할 수 있습니다. 단점으로는 요청 작업의 완료 여부가 필요하다면 구현이 복잡해집니다.
위에서 언급한 사장님의 생각이 변화된 상황으로 설명해보겠습니다. 전통적인 업무 절차가 현시대에는 맞지 않다고 생각되어 앞으로 결재 요청은 책상 위에 두는 방식으로 변경합니다. 앞으로 비서는 결재 요청을 하고 다른 작업을 진행하여 더 많은 업무량을 처리할 수 있게 되었습니다.
결국
동기/비동기는 작업 처리의 흐름에 대한 개념이고, Blocking/Non-Blocking은 작업 중 제어권 반환 여부에 대한 개념입니다. 비슷해 보일 수 있지만 서로 독립적인 개념이며 각 개념을 동시에 가질 수 있습니다. 개념이 독립되었으므로 조합하여 생각해볼 수 있는데 이 내용은 다음편에서 이어집니다.
댓글