본문 바로가기

CS/공통

동기와 비동기, 블로킹과 논블로킹 정리

반응형

동기와 비동기

간단하게 정리하면 동기는 프로세스를 순차적으로 수행하는 것, 비동기는 프로세스를 순차적으로 수행하지 않는 것이다.

동기 처리

동기는 작업 사이에 순서가 있어 항상 앞에 작업이 끝나야 다음 작업을 수행하는 것이다.

 

예를들면 식당에서 음식을 주문한 후 해당 주문에 대한 음식을 조리하고 손님에게 서빙한다.

손님이 주문 하지 않았는데 음식을 조리하고 손님에게 서빙하진 않는다. 

 

동기식 처리는 이 처럼 작업 사이에 순서가 있어 항상 앞의 작업이 끝난 후 다음 작업을 처리한다.

 

비동기 처리

비동기는 작업 사이에 순서가 중요하지 않아 앞의 작업이 끝나지 않아도 다음 작업을 수행할 수 있다.

 

예를들면 우리가 온라인 쇼핑몰에서 옷을 주문할 때 먼저 주문한 옷이 다 배송이 끝나고 다음 옷의 배송이 시작되지 않고 늦게 주문한 옷이 먼저 도착하기도 한다.

 

비동기식 처리는 이 처럼 작업 사이에 순서가 없어 앞의 작업이 끝나지 않았어도 작업을 시작할 수 있고 뒤 늦게 시작한 작업이 먼저 끝나기도 한다.

 

비동기 처리는 여러 작업을 동시에 수행하기 때문에 동기 처리 방식보다 효율적이다. 

 


 

블로킹과 논블로킹

동기와 비동기는 작업을 순차적으로 수행하는 지에 대한 기준이라면 블로킹과 논블로킹을 나누는 기준은 제어권이다.

블로킹

블로킹은 호출한 함수에 제어권을 넘겨 호출한 함수가 끝날 때 까지 자신은 멈춘다.

 

예를들면 자바에서 scanner.nextInt() 함수를 호출하면 입력이 들어올 때 까지 실행을 멈춘다.

논블로킹

논블로킹은 호출한 함수에 제어권을 넘기지 않아 호출한 함수가 끝날 때 까지 기다리지 않고 자기 일을 계속 한다.

 

예를들면 엄마가 자식에게 숙제를 시켜놓고 계속 감시하며 기다리는 것이 아니라 엄마도 자기 일을 하는 것이다.

 


 

4가지 조합

동기와 비동기 + 블로킹과 논블로킹을 조합하여 어떤 상황들이 있는지 예시를 통해 알아보겠다.

 

 

 

 

동기 + 블로킹

작업을 맡겨 놓고 자신은 해당 작업이 완료될 때 까지 기다렸다가 해당 작업이 끝나면 다음 작업을 순차처리한다.

선생님: 철수야 1번 문제를 풀어봐
철수: (푸는중)
선생님: (감시중) 
철수: 다 풀었어요
선생님: 민지야 2번 문제를 풀어봐
민지: (푸는중)
선생님: (감시중)
민지: 다 풀었어요

 

 

비동기 + 논블로킹

작업을 맡겨 놓고 자신은 맡긴 작업이 완료되는 동안 다른 작업을 처리하고 있는다. 맡긴 작업들은 동시에 진행되며 작업의 순서가 지켜지지 않는다.

선생님: 철수는 1번 문제 풀고, 민지는 2번 문제 풀고, 길동이는 3번 문제 풀어봐
철수, 민지, 길동: (푸는중)
선생님: (할 일 하는중)
민지: 다 풀었어요
길동: 다 풀었어요
철수: 다 풀었어요

 

동기 + 논블로킹

작업을 맡겨 놓고 자신의 작업을 처리하는데, 맡겨 놓은 작업들 사이에 순서가 있어 앞의 작업이 끝나야 다음 작업을 시작하는 경우이다.

선생님: 철수야 1번 문제를 풀어봐
철수: (푸는중)
선생님: 철수야 다 풀었어? 너가 풀어야 민지가 다음 문제 풀지
철수: 아직이요...
선생님: 아직이야?
철수: 네 아직이요...
철수 다 풀었어요!
선생님: 그럼 민지가 2번 문제를 풀어봐
민지: (푸는중)
선생님: 민지야 다 풀었어? 너가 풀어야 길동이가 다음 문제를 풀지

 

 

참고

https://velog.io/@ddclub12/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-VS-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9
https://www.youtube.com/watch?v=oEIoqGd-Sns
반응형

'CS > 공통' 카테고리의 다른 글

네이티브 앱 vs 웹앱 vs 하이브리드 앱 vs PWA  (1) 2024.03.15
개발 방법론 정리  (2) 2024.03.15