본문 바로가기

통신

동기(Synchronous), 비동기 (Asynchronous), blocking, non blocking

동기(Synchronous : Sync(동시) + chrono(시간))
-어떤 작업이 다 끝나고 난 뒤에 가능한 작업. 다르게 표현하면 원래 진행됐던 작업이 제어권을 다른 작업에게 넘겨서 자신은 일을 못하고 그 다음 작업이 일을 진행하는 것이다.
 
예시 : 음식점에서 배달의 민족 주문이 들어왔다고 치자. 주문이 들어가기 전까지는 요리사가 딱히 어떤 작업을 하고 있지 않다. 하지만 주문이 들어오고 나서 음식의 조리를 시작한다. 주문자는 음식을 수령하기 전까지는 별다른 일을 하고 있지 않다. (제어권을 요리사에게 넘긴 셈이다.) 요리사는 음식의 준비가 완료되면 포장을 하고 배달 기사님께 전달드린다. (제어권이 요리사에서 배달기사에게로 넘어간다.) 배달기사는 음식을 수령받기 전까지는 별다른 일을 하고 있지 않다. 음식을 수령 받으면 주문자에게 음식을 배송해준다. 음식을 배송받기 전까지는 아무일도 하고 있지 않던 주문자는 음식을 받고 나서 계산을 하고 음식을 먹는다. (제어권이 주문자에게로 넘어갔다.)
 
비동기(Asynchronous : A(부정의 의미를 지닌 접두사) + Sync(동시) + chrono(시간))
-어떤 작업이 끝나기 전까지 기다리지 않고 다른 작업을 하는 것을 의미한다. 작업에 대한 결과를 받아서 처리하고 다른 일을 할수도 있고 작업에 대한 결과를 받지 않고 다른 작업을 진행할 수도 있다.
(상황에 따라서 개발자가 맞춰서 개발하면 된다.)
 
예시 : 앞의 상황을 조금 더 확장해서 설명해보겠다. 음식점이 너무 잘되서 배달주문 외에도 홀에서 손님이 여러명이 있는 상황이라고 쳐보자.
배달의 민족으로 주문자가 주문을 한다. 주문을 받은 요리사는 주문을 받고 요리를 하는 동시에  홀의 손님들이 주문한 음식을 조리한다. 그리고 주문자는 음식이 오기 전까지 심심해서 아무것도 안하는게 아니라 게임을 한다. 각자 하던 일을 중단하고 마냥 기다리는게 아니라 다른 일을하는점이 핵심이다. 
 
blocking
-'중단' 이라는 의미다. 하던 작업을 중단한다는 말인데 보통 동기와 엮어서 같이 쓰는 개념이다. Synchronous Blocking 이라고도 얘기한다. 하던 작업을 멈추고 제어권을 다른 작업에게 넘겨주는 경우다. 위의 예시에서  언급한 것과 같다.
 
non-blocking
-blocing과 반대로 작업을 중단하지 않고 속행 한다는 말이다. 보통 Asynchronous 와 함께 묶어서 Asynchronous nonblocking 이라고 많이 얘기한다. 위의 예시에서 언급한 것과 같다.
 
주의사항
-항상 헷갈리는 내용이 있는데 non blocking 이랑 async의 개념 차이를 제대로 인지하지 못하는 것이다. asnyc는 작업이 끝나느냐 마느냐에 무게를 두고 얘기하는 개념이고 blocking 과 non blocking 은 작업의 제어권을 갖고 있냐 마느냐에 무게를 둔다. 제어권은 함수의 코드나 프로세스의 실행 흐름을 제어할 수 있는 권리 같은거다. Blocking과 non-Blocking은 호출된 함수가 호출한 함수에게 제어권을 넘겨주냐 마느냐의 문제다. 제어권이 넘어가게 되면 해당 스레드는 블로킹된다.
 
 
 
 
 
 
 
 
 
 
 
 
 

'통신' 카테고리의 다른 글

suspendCancellableCoroutine 이란  (0) 2024.05.04