동기 , 비동기를 학습하면서 어느정도 개념은 이해가 되는데
코드로 구현하려니 막히는 느낌이 들어서 다시한번 개념 정리 해두고 간단한 예제코드를 기록해두어야겠다 !!
고양이랑 누워있고 싶은 나..(?)
ex > ( 사장님 혼자 일하는 ) 💁🏻♂️카페에서 음료를 주문받음(1s) ➡️ 💁🏻♂️ 주문 받은 음료 제조 (1s) ➡️ 💁🏻♂️ 음료 전달(1s) ➡️ 💁🏻♂️ 다시 주문받음(1s)
비동기란 ?
: 특정 코드의 실행이 완료될 때 까지 기다리지 않고 다음 코드들을 수행하는 것
①. 실행 시점에 도달하면 동기코드는 실행 , 비동기 콜백 코드는 환경 ( WebAPI등 ) 으로 넘겨줌
②. 자바스크립트의 실행환경 ➡️ 멀티스레드 ⭐️
③. 작업을 마친 ( 일정시간이 지난 ) 코드들은 테스크큐( task queue )로 진입
④. 이벤트 루프( event loop) 는 테스크큐에서 받은 코드가 도착하는 대로 자바스크립트 싱글스레드에 올려줌
ex > ( 알바생 + 사장님이 함께 일하는 ) 💁🏻♂️ 카페에서 음료주문을 받음 ( 1s )
➡️ 🙋🏻♀️ 알바생 : 주문받은 음료를 제조ing + 💁🏻♂️ 사장님 : 다음손님 음료 주문을 받음 ( 1s )
➡️ 🙋🏻♀️ 알바생 : 제조한 음료 전달 후 다음주문 음료 제조 ... ( 비동기 ) ( 1s )
다음 주문을 받기까지 걸린 시간 = 2s
한명이 일할 때 보다 여러명씩 ( 여러 차선에서 ) 일을 하면 더 효율적으로 빠르게 일처리가 가능함 ! ⭐️
YES!!!!
➡️ 동기적으로 작동하는 것이지만, 자바스크립트가 작동하는 환경 ( 런타임 Web API) 에서 비동기처리를 도와주기 때문에 특별한 작업 필요없이 비동기처리가 가능한 것 ❗️❗️
➡️ JavaScript 자체 즉 JavaScript 엔진은 비동기 함수가 없다는 것을 꼭 명심 ⭐️
callback
함수 setTimeout
타이머를 종료clearTimeout( timer )
을 실행하면 setTimeout
이 종료됨 setInterval
타이머를 종료