동기(Synchronous)
동기의 뜻을 살펴보면 '동시 발생하는'라는 뜻을 가지고 있다. 즉, 요청과 결과가 동시에 발생한다고 할 수 있다.
그래서 요청을 하면 시간이 얼마나 걸리든 그 자리에서 결과가 주어져야 한다.
순서대로 진행된다는 장점이 있지만, 여러 가지 요청을 동시에 수행할 수 없다.
카페에서 음료를 주문하는 과정을 예로 설명하면, 음료를 주문하고 음료가 나올 때까지 계산대에서 기다리는 것을 동기 방식의 예로 설명할 수 있다.
비동기(Asynchronous)
반면에 비동기는 '동시에 발생하지 않는'라는 뜻을 가지고 있다. 즉, 요청과 결과가 동시에 발생하지 않는다.
그래서 하나의 요청에 따른 응답을 바로 하지 않고, 또 다른 요청에 대해 처리가 가능한 방식이다.
동기 방식에 비해 여러 가지를 처리할 수 있다는 장점이 있지만, 속도가 떨어진다는 단점이 존재한다.
카페에서 음료를 주문하는 과정을 예로 설명을 하면, 동기 방식과 달리 주문을 한 번에 받고 음료가 만들어지는 대로 손님에게 응답해주는 것을 예로 볼 수 있다.
'블로킹'과 '논블로킹'은 뭐지?
동기와 비동기에 차이에 대해 알아보다가 '블로킹'과 '논블로킹'에 대해 접하게 되었다.
바라보는 관점에 따라 동기와 비동기 그리고 블로킹과 논블로킹을 나눌 수 있다. 동기와 비동기의 차이는 위에서 살펴보았으니 여기서는 블로킹과 논블로킹의 차이에 대해 설명하겠다.
- 블로킹
호출된 함수가 자신의 작업이 종료될 때까지 제어권을 가지고 있는 것을 말한다. 그래서 호출된 함수의 작업이 끝날 때까지 호출하는 함수는 다른 작업을 할 수 없다.
- 논블로킹
블로킹과 달리 호출된 함수가 자신의 작업이 종료되지 않더라도 제어권을 호출하는 함수에게 넘겨주는 것을 말한다.
Example
팀장은 사원에게 업무를 지시하고 사원은 지시받은 업무를 수행하는 상황에서 예시를 보도록 하자.
1) 비동기, 논블로킹
- 팀장은 각각 사원에게 업무를 지시하고, 본인의 업무를 수행한다.(비동기)
- 사원은 지시받은 업무가 완료되면 팀장에게 보고한다.
- 팀장은 보고받은 결과를 확인한다.(논블로킹)
팀장은 업무 지시(요청)를 하고 업무가 완료될 때까지 기다리지 않고 추후에 보고(응답)를 받는다. 비동기 방식으로 업무를 진행하고 있다.
사원에 의해 팀장이 붙잡히지 않고 본인의 업무를 수행하고 있다. 그러므로 사원은 논블로킹 방식으로 업무를 수행하고 있다.
2) 비동기, 블로킹
- 팀장이 A사원에게 업무를 지시했고, 다음으로 B사원에게 업무를 지시하려는 한다.(비동기)
- 그 순간 A사원이 팀장을 붙잡고 자신의 업무가 끝날 때까지 팀장을 놔주지 않는다.(블로킹)
- A사원은 자신의 업무가 끝나고 팀장에게 보고한 후 팀장을 놔준다.
- (이후로 팀장은 B사원과 C사원에게도 위 과정이 반복된다.)
3) 동기, 논블로킹
- 팀장이 A사원에게 업무를 지시한다.
- 다른 사원에게 업무를 지시하지 않고, A사원의 업무가 끝날 때까지 기다린다.(동기)
- 다른 사람은 팀장을 기다리고 있고, 팀장은 A사원의 업무가 끝나면 보고받는다.
- (다른 사원에게도 위 과정이 반복된다.)
4) 동기, 블로킹
3번과 동일하게 진행된다.
정리
동기 vs 비동기 : 처리해야 할 작업을 어떠한 흐름으로 처리할 것인가에 대한 관점.
블로킹 vs 논블로킹 : 처리되어야 하는 작업이 전체적인 흐름을 막는지 안 막는지에 대한 관점.
우리가 흔히 말하는 '비동기로 처리한다'는 말은 '논블로킹'이 내포되어 있다. 왜냐하면 '블로킹'이 되어 버리면 비동기로 처리하려고 해도 우리가 원하는 대로 작업이 이루어지지 않는다.
▽ 도움을 주신 분들
'기타' 카테고리의 다른 글
[Linux] 리눅스 명령어와 친구가 되어보자! ( 관리 명령어편 ) (1) | 2022.11.01 |
---|---|
인증번호 전송 기능을 구현해보자! (6) | 2022.09.21 |
메시지 큐(Message Queue)에 대해 알아보자! (1) | 2022.09.14 |