JavaScript 는 싱글쓰레드
이지만!!
그래도 쓰레드에 대한 개념을 알고 있으면 JavaScript 비동기처리에 대한 느낌을 더 잘 알 수 있다!
Thread
란 일 처리를 하는 하나의 Line 이다.
서버와의 통신(네트워크 작업) 때문
💡 작업을 다른 쓰레드에서 하도록 시킨 후,
그 작업이 끝나길 ‘안 기다리고’ 다음일을 진행한다.
배달의민족으로 주문한다고 생각해보자.
밥 주문
배달의 민족을 통해 주문을 했을 경우 다음과 같은 일이 일어난다.
Promise
를 던져준다.reject
를 던져준다.resolve
해준다.자주 실수 하는 내용
밥이 아직 안왔는데 밥을 먹는다 라는 명령을 시킬 때가 있다..
const getMeal = async () => {
return axios.get('https://배달의민족주문').then(res => res.data)
}
const eatMeal = (meal) => {
// do something...
// 냠냠쩝쩝
}
// 실수 예시
eatMeal(getMeal()) // <Promise>를 meal 에 던지고 있다.
// 안 실수
getMeal().then(meal => eatMeal(meal));
// 안 실수 더 맛있게
getMeal().then(eatMeal) // 보내는 인자와 받는 인자가 같을 때에는 생략이 가능 하다
💡 작업을 다른 쓰레드에서 하도록 시킨 후,
그 작업이 끝나길 ‘기다렸다가' 다음일을 진행한다.
“다른 한개의 Thread 에서”
⇒ 순서가 중요한 작업을 처리할 때 사용
“다른 여러개의 Thread 에서”
⇒ 각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용
💡 그런데 분산 처리 할때 어쩃든 동시처리가 더 좋아보이는데 왜 직렬처리가 필요할까?
YES :: 작업에 순서가 필요할 수도 있기 때문!!
💡 NO.
비동기
는 작업을 보내는Main Thread
가 주체이고
동시처리
는 작업을 받는Thread
가 주체이다.