일개미 : 일상과 개발의 미학

동기와 비동기의 개념과 장단점(feat. 블럭, 넌블럭) 본문

Developments/CS

동기와 비동기의 개념과 장단점(feat. 블럭, 넌블럭)

9low_28 2022. 12. 9. 02:26

 

데이터를 받는 방식에는 크게 두 가지가 있다. 동기와 비동기.

오늘은 이 두가지를 프로그래밍 관점에서 정리해보고자 한다 최대한 이해가 쉽도록 설명해보려 한다 :)

 

 

 

💡 의미, 그리고 개념

 

  • 동기 (Synchronous) ; 동시의, 동시에 발생하는 
  • 비동기 (Asynchronous) ; 동시에 발생하지 않는

 

단어의 의미 그대로 직관적으로 보면 이해가 쉽다. 서두에서 데이터를 받는 방식에 대해 설명하고자 했으니, 데이터에 요청에 있어서 그 결과를 받음이 동시에 일어나는지 아닌지의 여부로써 약속한 방식을 말한다.

 

동기

요청을 하면 그에 따른 응답까지 소요되는 시간에 관계없이 요청한 자리에서 응답 결과가 주어져야 한다.

클라이언트를 통해 데이터를 서버에게 요청한다면 서버는 그에 따른 응답을 클라이언트에게 전달하기까지 사용자는 다른 활동을 할 수 없이 기다려야만한다.

 

예를 들어, 김씨가 게임을 하다 컴퓨터가 고장나 고객센터에 전화로 상담을 한다고 가정하자. 문의사항이 A,B,C 로 총 세 개가 있다고 했을 때, 상담원은 고객에게 순차적으로 하나씩 문의를 받고 처리할 것을 안내하였다. A문의를 받고 처리하는 동안 다른 문의는 받을 수 없고 A에 대한 상담원의 답변까지 끝났을 때, B를 문의할 수 있을 것이다. 김씨가 B를 문의하기 위해서는 A에 대한 답변을 받기까지 기다려야만 했을 것이다. 

 

 

비동기

요청한 결과는 동시에 일어나지 않는다.

클라이언트를 통해 데이터를 서버에게 요청한 후에 그에 따른 응답을 계속 기다리지 않아도 되며, 다른 외부의 작업을 하거나 혹은 서버에게 다른 요청을 보내도 상관없다.

 

며칠 후 김씨는 A/S센터를 방문하여 엔지니어에게 고장난 컴퓨터의 수리를 의뢰하였다. 그런데 엔지니어가 현재 센터에 부품이 없어 본사로부터 부품을 받아야하는데 이 부품을 받기 위해서는 3일이 소요된다고 한다. 김씨는 알겠다고하고 컴퓨터를 맡기고 수리되는대로 찾으러온다고 하였다. 수리되는 동안 김씨는 직장에 출근도 하고 동료와 회식도 하고 집안일도 하다가 A/S센터로부터 수리가 완료되었다는 연락을 받고 맡긴 컴퓨터를 되찾아왔다.

 

 


 

🆚 장•단점으로 보는 차이

 

이 두 방식에는 각각 어떤 장단점이 있을까? 표로 간단히 정리하자면 다음과 같다.

구분 동기 비동기
장점 설계가 간단하고 직관적이다 응답까지 걸리는 시간동안 다른 작업이 가능하고 자원의 효율적 사용이 가능하다
단점 응답이 도달할 때까지 다른 작업을 할 수 없고 대기해야한다. 동기에 비해 설계가 복잡하고 논증적이다.

 

또한 앞의 본문 내용을 정리하자면 동기는 추구하는 행위와 목적이 동시에 일어나며, 비동기는 추구하는 행위와 목적이 동시에 일어나지 않는 것이라고 할 수 있다.

 

 

 

🧱 블럭과 넌블럭 

 

동기/비동기와 연결되는 개념 중에 블럭과 논블럭 이라는 것이 있다.(혹은 명사로 블로킹/논블로킹으로 말하기도 한다.) 이 단어들 또한 직관적으로 쓰여 처리되어야하는 어떠한 작업이 전체적인 작업의 흐름을 막는지 아닌지에 대한 관점으로 부터 나온 개념이다. 즉, (시스템 등에서) 제어권이 어디에 있는지가 관건이라 할 수 있다.

 

블럭 (Block)

자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것 (기존 작업이 막힘)

 

1번 함수와 2번 함수가 있다고 하면,

1번 함수의 실행 중에 2번 함수가 시작되면 2번 함수가 종료되어야지 다시 1번 함수의 작업이 실행된다. (제어권을 2번에게 넘겨주었다가 끝난 시점에 1번이 돌려받는다.

 

 

쉽게 비유하면, 나는 별다방에 노트북을 들고 가서 인터넷을 하려고 브라우저를 켰는데 와이파이 사용에 대한 동의를 해야한다는 창이 나타났다. 동의를 하지 않으면 인터넷을 이용할 수 없어 모두 동의하고 완료버튼을 눌렀더니 그제서야 브라우저를 다시 사용할 수 있었다.

 

 

 

넌블럭 (Non-Block)

호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 바로 return하여 호출한 함수가 다른 일을 진행할 수 있도록 하면 넌블럭이다.

 

1번 함수의 실행 중에 2번 함수가 호출되어 시작된 후 종료전이라해도 이는 실행만되고 제어권은 1번 함수에게 바로 돌려준다. 제어권이 넘어가지 않고 1번에게 있기 때문에 2번 함수가 실행중이라해도 1번 함수 또한 같이 실행된다.

 

 

이 또한 쉽게 비유하면, 별다방에서 나는 자리를 다 잡고 아이스 자허블을 주문을 완료했다. 이 때 철수라는 직원이 주문을 받아 영희라는 직원에게 음료 제조를 맡기고 영희가 음료를 제조하는 동안 철수는 내 뒤에 서있던 남은 고객들의 주문을 받고 있었다.

 


 

🛠️ 조합에 따른 작업 방식

 

동기와 비동기, 그리고 블럭과 넌블럭의 조합에 따라 작업(함수 등)의 실행 방식이 달라진다.

각 2가지씩이니 조합은 총 4개가 있다.

  1. 동기 + 블럭
  2. 동기 + 넌블럭
  3. 비동기 + 블럭
  4. 비동기 + 넌블럭

 이 중 웹에서는 가장 비효율적이여서 그다지 사용되지 않는 동기-넌블럭 조합과, 동기-블럭 조합과의 성능 차이가 없고 대개 실수로 발생되는 비동기-블럭 조합은 제외하고 특징을 다루어보도록 하겠다. (다루지 않을 나머지 두 조합이 궁금하다면 참고 문헌 중 가장 아래 링크를 참고바란다.)

 

 

*편의상 파란색은 함수 1, 빨간색을 함수 2 라고 하겠다.

 

동기 + 블럭
함수 1은 작업을 실행하다가, 함수 2를 호출하여 실행시킨다. 이 때 함수 2에게 제어권을 넘겨 함수 1은 (제어권이 없으므로) 실행이 멈춘다.(1이 나머지 다른 작업을 하지 못한다.)
2가 실행을 마치고 완료되어 1에게 제어권을 돌려주고 1은 나머지 함수를 실행한다.

 

 

비동기 + 넌블럭
마찬가지로 함수 1은 작업을 실행하다가, 함수 2를 호출하여 실행시킨다. 이 때 함수 2는 제어권을 다시 바로 1에게 반환하여 제어권이 1에게 있기 때문에 2가 실행되는 동안에도 1은 완료 될때까지 나머지 함수(다른 작업)를 계속 실행하게 된다.

 

 


 

 

이렇게 동기와 비동기, 블럭과 넌블럭에 대해 정리해보았다.

용어도 직관적으로 사용되어 최대한 이해가 쉽도록 비유하였는데 잘 설명되었을지 걱정되니,,,

 

문제를 발견하거나 이해가 되지 않는 부분은 댓글 남겨주시길 🙏🏻

 

 

 

 

 

 

 

 

 

 

 

*참고 문헌

 

01. 기초

# 블록/논블록, 동기/비동기 **블록, 논블록은 함수를 호출 해놓고 다음 코드를 실행할 수 있는지 여부이다.** * **블록(Block)** * 호출된 함수가 자신이 …

wikidocs.net

 

비동기 통신과 AJAX (동기 비동기의 개념, 차이,장단점, 예시, 콜백함수, 콜백지옥)

비동기 통신과 AJAX (동기 비동기의 개념, 차이,장단점, 예시, 콜백함수, 콜백지옥) 데이터를 받는 방식인 동기와 비동기 그리고 AJAX. 각각이 무엇이며, 어떤 특징이 있는지 예시를 통해 알아본다.

sudo-minz.tistory.com

 

👩‍💻 동기 & 비동기 / 블로킹 & 논블로킹 💯 완벽 이해하기

동기 & 비동기 vs 블로킹 & 논블록킹 개념 이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들이 서로 뭔가 연관이 있는 것으로 오해하기 쉽다. 아무래도 동기와 블록킹,

inpa.tistory.com