본문 바로가기
프로그래밍 기타

Blocking(블로킹) vs Non-Blocking (논 블로킹) vs 동기 vs 비동기

by 애플 로그 2022. 7. 22.
반응형

1. Blocking(블로킹) vs Non-Blocking (논 블로킹)

대충은 알것같은데 설명해보라고하면 설명은 못하겠고, 그래서 찾아보면 이해할것같다가도 못하게되는 뭔가 그런놈이다. 당연히 설명할수있는 방식으로 내 머리속에서 정리 해놓아야한다. 그치 이런거다라고 정리가 되어야 누구랑도 이야기를 나눌수 있을것이다.

 

블로킹과 논블로킹의 차이점은 작업의 흐름이 멈추는지를 잘 생각해야 한다. 

  • blocking(블로킹) :  작업이 완료 될때까지 모든일을 중단하고 대기해야하는 방식을 블로킹 방식
    • A함수 내에서 B함수를 호출했다고 치자, B함수로 제어권이 넘어가게되며,  A함수는 B의 작업이 끝날때까지 기다렸다가 종료되면 자신이 멈췄던 부분부터 작업을 이어나간다.
      • 호출된 함수 B로 제어권이 넘어간다.

  • Non-blocking(논블로킹) : 작업이 중단되지 않는다 완료가 될때까지 기다리지 않고 다른 작업을 수행할수 있다.
    • A라는 함수가 실행중에 B함수를 호출했다고 치자, A함수는 제어권을 B함수에 넘기지 않고 그대로 자신이 가지고 있으며, B함수의 완료여부와 상관없이 작업을 계속한다.
      • 호출한 함수A가 제어권을 계속 가진다.

2. 동기 (Synchronous) vs 비동기 (Asynchronous)

블록킹 논블록킹에 대해서는 이제 조금 알겠다. 면접떄 물어보면 어느정도 A,B 해가면서 제어권이 있어서 이래저래 하다 라고 설명 하면 되겠다. 근데 블록킹하고 논블록킹 검색해보면 항상 셋트매뉴처럼 동기 vs 비동기가 있다.

알아보기 싫은데 아무튼 집고 넘어가야겠다.

 

 

동기 (Synchronous) 

  • 처리되고 있는 작업의 요청이 모두 완료하여 응답을 리턴받은 후에 다음작업을 처리할수있따.
    • 호출하는 함수 ----> 호출된 함수
    • 호출하는 함수는 호출된 함수의 작업이 완료되었는지 계속 신경 쓰고있다. 
  • 세탁기, 식기세척기, 로봇청소기를  돌려야한다.
    • 세탁기를 돌리고 다 끝날떄 까지 앞에서서 기다린다. 끝났다는 알림을 받는다.
    • 식기세척기를 돌리고 다끝날때 까지 앞에서서 기다린다. 끝났다는 알림을 받는다.
    • 로봇청소기를 돌리 끝날때 까지 앞에서서 기다린다. 끝났다는 알림을 받는다.

 

비동기 (Asynchronous) 

  • 호출하는 함수가 호출된 함수의 작업완료 여부를 신경쓰지않는다.호출하는 함수는 함수를 호출할때 callback 함수를 같이 전달하고 작업이 완료되면 callback 함수가 실행된다.
    • 호출하는 함수 ----> 호출된 함수
    • 호출하는 함수가 호출된 함수의 작업 완료여부를 신경쓰지 않는다.

 

아직도 이해하기가 힘들다면 아래 예시를 다시한번 보자

 

3. 예시 - 비동기 + 논블록킹

  • 엄마로봇은 세탁로봇, 식기세척로봇, 청소로봇을  돌려야한다.
    • 엄마로봇은 세탁로봇, 식기세척로봇, 청소로봇 시작 버튼을 눌렀다 ( 비동기적 작업 시작 ) 
      • 동기식이라면 엄마로봇는 세탁로봇이 작업이 끝날때까지 앞에서서 기다린다.
    • 엄마 로봇은 다른 일을 하기 시작한다.
    • 각각 세탁로봇, 식기세척로봇, 청소로봇은 업무 종료시 보고한다. (논블록킹방식 작업처리)
      • 블록킹 이라면, 세탁로봇가 자신의 일을 끝낼때까지 엄마로봇을 붙잡는고 놓아주지 않음. (제어권 뻇어감 )

엄마로봇는 비동기적 방식으로 처리하고 있다.

그리고 세탁로봇, 식기세척로봇, 청소로봇은 "논블럭킹"방식으로 일을 수행한다.

 

4. 예시 - 동기 + 블록킹

  • 엄마로봇은 세탁로봇, 식기세척로봇, 청소로봇을  돌려야한다.
    • 엄마로봇은 세탁로봇에게 세탁을 지시 한뒤 앞에서서 끝날때 까지 기다린다... ( 동기적 작업지시 ) 
      • 만약 비동기식이라고 해도 세탁로봇이 엄마로봇을 붙잡고 놓아주지 않음 : 블록킹 
    • 세탁이 끝나면 엄마 로봇이 확인 함.
    • 엄마로봇은 식기세척로봇에게 식기세척을 지시 한뒤 앞에서서 끝날때 까지 기다린다. ( 동기적 작업지시 ) 
    • 식기세척이 끝나면 엄마 로봇이 확인함.
    • 엄마로봇은 청소로봇에게 세탁을 지시 한뒤 앞에서서 끝날때 까지 기다린다. ( 동기적 작업지시 ) 
    • 청소가 끝나면 엄마로봇이 확인 함.

엄마 로봇는 동기적 방식으로 처리하고 있다.

 

5. 최종 결론

  • 동기 vs 비동기는  : 엄마로봇 입장
    • 처리해야할 작업들을 "어떤 흐름으로 일을 처리" 할것가에 대한 관점
  • 블록킹 vs 논블록킹 : 세탁로봇, 식기세척로봇, 청소로봇 입장
    • 처리되어야 하는 "하나의 작업이 전체 흐름을 막느냐 안막느냐"에 대한 관점

댓글