보통 블럭(Blocking)과 동기(Synchronous)가 같고 넌블럭(Non-Blocking)과 비동기(Asynchoronous)가 같은 개념이라고 생각하기 쉽지만 별개의 개념이라는것을 알아야한다.
개념
블럭/넌블럭은 함수호출에서의 이야기. 기술적으로 명확히 구분된다.
동기/비동기는 행위에 대한 이야기. 기술적으로는 구분되지 않지만 추상적으로 구분한다.
Synchronous
호출된 함수의 수행 결과 및 종료를 호출된 함수 뿐 아니라 호출한 함수도 함께 신경쓰면 동기이다.
Asynchoronous
호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경쓰고 처리하면 비동기이다.
이제 이 개념들이 조합된 것을 이해해보자.
손님: 아메리카 주문
직원: 아메리카노 만드는중
손님: (그 자리에 서서 기다리는중. 결과가 궁금함. 테이블 못가고 서있음.)
블럭 & 비동기는 결국 다른 작업이 끝날 때를 기다려야 하기 때문에 동기 & 비동기와 비슷한 효율이 나온다.
손님: 아메리카노 주문
직원 : 아메리카노 만드는중
손님 : (안궁금함. 테이블에 가고싶지만 못가고 서있음.)
손님: 아메리카노 주문
직원 : 아메리카노 만드는중
손님 : 재촉
손님: 아메리카노 주문
직원 : 아메리카노 만드는중
손님 : 자리가서 SNS, 유튜브 시청
직원 : 아메리카노 제작 완료
실제 코드 예제 : HAMA
잘 읽었습니다^^
중간에 "블럭 & 비동기는 결국 다른 작업이 끝날 때를 기다려야 하기 때문에 동기 & 비동기와 비슷한 효율이 나온다." 에서 '동기 & 비동기'는 '블록 & 동기'의 오타가 아닐까 싶네요