호출된 함수가 호출된 함수에게 제어권을 건네주는 유무의 차이
함수 A, B가 있고, A(호출한 함수)안에서 B(호출된 함수)를 호출한 상황에서
B가 호출되며 B는 자신의 일을 진행히야함(제어권이 B에게)
동기/비동기는 일을 수행 중인 동시성에 주목해야함
위와 같은 함수 A, B의 상황일 때, B의 수행 결과나 종료 상태를 A가 신경쓰고 있는 유무의 차이
호출된 함수(B)를 호출한 함수(A)가 신경쓰는지, 호출된 함수(B) 스스로 신경쓰는지를 동기/비동기
비동기는 호출시 Callback을 전달하여 작업의 완료 여부를 호출한 함수에게 답하게 된다. (Callback이 오기 전까지 호출한 함수는 신경쓰지 않고 다른 일을 할 수 있음)
통합
Sync Blocking : JAVA 코드 실행 후 커맨드에서 입력을 받는 경우. 사용자로부터 입력을 받아야 입력값을 가지고 내부 처리하여 결과값을 콘솔에 출력하는 순차적인 작업
Async Blocking : 실무에서 마주칠 일 잘 없음. 안티패턴이라고 부르기도함
Node.js + MySQL의 조합에서 존재하긴함. Node.js가 비동기 방식으로 DB에 접근하기 때문에 Async, MySQL DB에 접근하기 위한 MySQL 드라이버가 Blocking 방식으로 작용하기 때문에
Sync Non-Blocking : Java에서 스레드 객체를 만들어 요청 작업을 백그라운드에 돌게 하고 메인 메서드에서 while문을 통해 스레드가 모두 처리되었는지 끊임없이 확인하고, 처리 완료되면 다음 메인자작업 수행.
혹은 게임에서 맵을 이동할 때, 맵 데이터를 다운받는 동안 로딩 스크린이 뜸. 제어권은 여전히 나한테 있어 화면에 로드율이 조회 및 표시됨
Async Non-Blocking : 웹 브라우저 파일 다운로드
+예시
JS의 setTimeout
은 Asynchronous/Non-blocking 함수