동기/비동기와 블럭/넌블럭

HyunHo Lee·2021년 8월 30일
2

개념

목록 보기
5/14
post-thumbnail

보통 블럭(Blocking)과 동기(Synchronous)가 같고 넌블럭(Non-Blocking)과 비동기(Asynchoronous)가 같은 개념이라고 생각하기 쉽지만 별개의 개념이라는것을 알아야한다.

개념

블럭/넌블럭은 함수호출에서의 이야기. 기술적으로 명확히 구분된다.

  • Block
    호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 return하지 않으면 블럭이다.
  • Non-Block
    호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 바로 return하여 호출한 함수가 다른 일을 진행할 수 있도록 하면 넌블럭이다.

동기/비동기는 행위에 대한 이야기. 기술적으로는 구분되지 않지만 추상적으로 구분한다.

  • Synchronous
    호출된 함수의 수행 결과 및 종료를 호출된 함수 뿐 아니라 호출한 함수도 함께 신경쓰면 동기이다.

  • Asynchoronous
    호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경쓰고 처리하면 비동기이다.


이제 이 개념들이 조합된 것을 이해해보자.

  • 블럭 & 동기

손님: 아메리카 주문
직원: 아메리카노 만드는중
손님: (그 자리에 서서 기다리는중. 결과가 궁금함. 테이블 못가고 서있음.)


  • 블럭 & 비동기

블럭 & 비동기는 결국 다른 작업이 끝날 때를 기다려야 하기 때문에 동기 & 비동기와 비슷한 효율이 나온다.

손님: 아메리카노 주문
직원 : 아메리카노 만드는중
손님 : (안궁금함. 테이블에 가고싶지만 못가고 서있음.)


  • 넌블럭 & 동기

    논블로킹으로 자신의 작업을 계속하고 있지만 다른 작업과의 동기를 위해 계속해서 다른 작업이 끝났는지 조회한다. 즉, 호출된 함수가 호출한 함수에게 제어권을 바로 return하여 호출한 함수가 다른 업무를 볼 수 있었음(Non-Blocked)에도 불구하고, 여전히 호출된 함수의 업무 결과에만 계속 함께 신경쓰느라(Synchronous) 제 할일을 못하게 되는 현상이 일어난다. 넌블럭 & 동기도 효율이 좋지 않다.

손님: 아메리카노 주문
직원 : 아메리카노 만드는중
손님 : 재촉


  • 넌블럭 & 비동기

    자원이 충분하다면 효율이 좋다. 자신의 작업이 멈추지도 않고, 다른 주체가 하는 작업의 결과가 나왔을 때 콜백을 설정하기도 한다. 다른 주체에게 작업을 맡겨놓고 자신이 하던 일을 계속할 수 있기 때문에 해야 할 작업이 대규모이고, 동기가 필요하지 않을 때 효과적이다.

손님: 아메리카노 주문
직원 : 아메리카노 만드는중
손님 : 자리가서 SNS, 유튜브 시청
직원 : 아메리카노 제작 완료



실제 코드 예제 : HAMA








참고 블로그 : DevEric kjh3865

profile
함께 일하고 싶은 개발자가 되기 위해 달려나가고 있습니다.

1개의 댓글

comment-user-thumbnail
2022년 6월 19일

잘 읽었습니다^^
중간에 "블럭 & 비동기는 결국 다른 작업이 끝날 때를 기다려야 하기 때문에 동기 & 비동기와 비슷한 효율이 나온다." 에서 '동기 & 비동기'는 '블록 & 동기'의 오타가 아닐까 싶네요

답글 달기