본문 바로가기
카테고리 없음

Blocking과 Synchronous

by N.Damgom 2021. 3. 22.

 

Synchronous의 뜻은 "동기적인" 이다. 동기적이라는 말의 뜻은 다음과 같다. 두 작업 A, B를 생각해보자. A는 B의 실행이 다 끝나야 그 실행의 결과를 가지고 하던 일을 계속 할 수 있다. 이 경우 A와 B는 동기적이라고 한다. 

Blocking은 기다리는 동안 다른 일을 못하고 중지된다는 뜻이다. 이 경우 기존에 하던 일을 못하고 다른 일을 하다가 초록색 화살표에서 실행한 작업이 끝나야 기존의 작업을 다시 실행할 수 있다.

 

헷갈리니 예시를 보자. 

 

 

출처 :musma.github.io/2019/04/17/blocking-and-synchronous.html

 

동기와 비동기, 그리고 블럭과 넌블럭

무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 한 번씩은 꼭 들어보고, 또 익혔음직한 내용이겠습니다. 이름하야, 동기(Synchronous)와 비

musma.github.io

블록킹, 동기의 경우는 대표가 개발자를 뽑는 걸 기다리면서 지켜보고 있다. 이 경우 나는 새로 뽑은 개발자가 누군지 알아야만 작업을 계속할 수 있는 경우다. 예를들어 할 일이 출장가는 것 밖에 남지 않았는데 개발자 2명이서 출장을 가야한다고한다. 그리고 회사에 개발자가 혼자인 상황이다. 새로 뽑은 개발자가 누군지 알아야만 탑승권을 발급받고 출장을 갈 수 있다.

 

블록킹 비동기의 경우는 대표가 개발자를 뽑는 동안 아까와 마찬가지로 아무것도 못하면서 지켜보고 있다. 이 경우 나는 새로 뽑은 개발자가 누군지 알 필요 없이 작업을 계속할 수 있지만 멈춰있는 상태다.  

 

논블록킹 동기의 경우는 대표가 개발자를 뽑는 동안 다른 일을 할 수 있지만 기존의 일은 하지 못하는 상황이다. 기존 일은 대표가 새로 개발자를 뽑은 다음에 진행할 수 있기 때문에 나는 대표에게 새로 개발자를 뽑았는지 확인하고 있다. 아까 블록킹, 동기의 예시에서 개발자 2명이서 출장을 가야하는데 한 명밖에 없어서 뽑아달라고 한다. 대표가 뽑을 동안 나는 다른 회사 일을 하고 있는 상황이다.

 

논블록킹 비동기의 경우는 대표가 개발자를 뽑는 동안 기존의 일을 계속 할 수 있는 상황이다. 예를 들어 바빠서 개발자를 한 명 더 뽑아달라고 한다. 개발자를 뽑는 동안 기존의 일을 계속 할 수 있고 새로 뽑은 개발자가 누구인지도 알 필요 없다.

 

 

 

하지만 동기/비동기, 블록킹/논블록킹을 이거 끝나야 다음 꺼 할 수 있는 거, 기다려야하는거 정도로만 이해하면 부족하다.

 

그래서 중요한 것은!!!!!!

 

동기/비동기는 작업 간의 연관관계이고
블록킹/논블록킹은 작업자의 연관관계를 나타낸다.

 

 

위의 예시를 다시 살펴보자. 작업은 "새로 개발자를 뽑는 일", "기존에 하던 일", 두 가지가 있다. 작업자는 "나"와 "대표"가 있다.

 

예를들어 비동기 블록킹의 뜻을 하나하나 살펴보자.

 

비동기: 작업간의 연관관계가 없다. 즉 개발자 뽑는 일 따로, 기존에 하던 일 따로 할 수 있다.

 

블록킹: 작업자간의 연관관계가 있다. 즉 대표님이 일하는 동안(개발자를 뽑는 동안) 나는 멈춰있어야한다.

 

내가하는 작업과 새로 개발자를 뽑는 작업과는 연관관계가 약하지만, 즉 누굴 뽑는지 상관없이 일할 수 있지만 대표님을 기다려야하는 상황이다. 구체적인 상황으로 둘이 일하는데 컴퓨터가 하나인 경우가 있다.