1. 동기
여러 개의 작업이 있을 때 그 작업들을 순서대로 한 번에 하나 씩 처리하는 것을 말함
⇒ 동기적으로 처리한다


Thread
하나의 프로세스(Process) 내부에서 실행되는 최소 실행 단위 로, 같은 프로세스의 메모리(Heap, Code, Data)를 공유하면서 독립적인 실행 흐름(Stack, Program Counter)을 가진다.
여러 스레드는 병렬성(Parallelism) 또는 동시성(Concurrency)을 통해 작업을 효율적으로 처리한다.
한 마디로 프로그램 안에서 코드가 실제로 실행되는 하나의 작업 흐름이다.
약간 일꾼 개념이라 일꾼이 여러명이면 더 빠르게 일을 처리할 수 있는거임!

⇒ 하나의 작업에서 너무 오랜 시간이 소요되거나 처리되지 않는 경우에는 프로그램 전체 성능이 악화될 수 있다.

Java나 C# 언어에서는 이를 개선하기 위해 멀티스스레드 기법을 사용한다.
하지만 자바스크립트는 단일 스레드 언어이기 때문에 이를 보완할 수 있는 다른 방법을 사용해야한다.
2. 비동기
단일스레드를 가진 자바스크립트 엔진 환경에서 사용하는 기법으로, 여러 개의 작업이 있을 때 이를 순서대로 처리하지 않는 방식을 의미한다.
우리가 부리는 일꾼은 한 명인데 얘가 편법을 써서 두 가지 일을 동시에 할 수 있는거임.
console.log(1);
setTimeout(() => {
console.log(2);
}, 3000);
console.log(3);3000ms 이후 setTimeout 내장함수 내부에 있는 콜백함수가 실행됨!

자바스크립트 엔진은 단일 스레드를 가지고 있는데 이런 경우에는 어떻게 동시에 작업을 하는 걸까?
⇒ setTimeout 내장함수 등과 같은 비동기 작업은 자바스크립트 엔진이 아닌 Web APIs에서 실행되기 때문!



받았던 콜백함수를 자바스크립트 엔진에 다시 돌려줌 ⇒ 자바스크립트 엔진에서 콜백함수 실행!
⇒ 스레드가 하나여도 비동기적으로 여러 작업을 동시에 처리 가능!
Share article