동기는 '직렬적'으로 작동하는 방식이고 비동기는 '병렬적'으로 작동하는 방식이다. 즉, 비동기란 특정 코드가 끝날때 까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 것을 의미한다. 비동기 처리를 예로 Web API, Ajax, setTimeout 등이 있다.
동기는 말 그대로 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다는 약속이다. 즉, 요청을 보낸 후 응답을 받아야지만 다음 동작이 이루어지는 방식이다. 순서에 맞춰 진행되는 장점이 있지만, 어떠한 태스크를 처리할 동안 나머지 태스크는 대기한다.
실제로 cpu가 느려지는 것은 아니지만 시스템의 전체적인 효율이 저하된다고 할 수 있다.
ex) 커피 주문을 하고 나올 때까지 기다리는 것., 계좌 이체 시 내 통장 -10,000원 상대방 통장 +10,000원
즉, 추구하는 행위(목적)이 동시에 이루어 진다.(ex. 커피 , 10,000원)
비동기는 동시에 일어나지 않는다를 의미한다. 요청과 결과가 동시에 일어나지 않을 거라는 약속이다. 하나의 요청에 따른 응답을 즉시 처리하지 않아도, 그 대기 시간동안 또 다른 요청에 대해 처리 가능한 방식이다. 즉, 요청을 보낸 후 응답의 수락 여부와는 상관없이 다음 태스크가 동작한다. a 태스크가 실행되는 시간 동안 b 태스크를 할 수 있으므로 자원을 효율적으로 사용할 수 있다.
여러 개의 요청을 동시에 처리할 수 있는 장점이 있지만 동기 방식보다 속도가 떨어질 수도 있다.
ex) 한 명의 직원은 음료를 만들고, 다른 직원은 주문을 받는다., 나는 시험을 보고, 선생님은 채점을 하고
즉, 추구하는 행위(목적)이 동시에 이루어지지 않음(ex. 커피 주문 & 커피 제조 , 시험 보는 것 & 채점하는 것)
✅ 동기와 비동기의 의미와 차이점
✅ 자바스크립트 런타임
✅ 콜백 함수
✅ 콜백 헬(Callback Hell)
✅ 블록 논블록
✅ 이벤트 처리