동기적(Synchronous) 처리
한 작업이 끝나야 다른 작업이 시작된다.
동시에 여러 작업을 처리할 수 없다.
동기적 처리의 예시
work() 라는 작업이 끝난 뒤에 다음 작업이 진행된다.
function work() {
const start = Date.now();
for (let i =0; i < 1000000000; i++) {
}
const end = Date.now();
console.log(end - start + 'ms');
}
work();
// 루프가 1,000,000,000번 돌고 작업이 얼마나 걸렸는지 알려준다.
// 409ms(계속 값이 바뀐다)
console.log('다음작업');
// work() 라는 작업이 끝난 후에 '다음작업'이 출력됨 - 동기적 처리
비동기적(Asynchronous) 처리
동시에 여러 작업을 처리할 수 있다.
기다리는 동안 다른 함수를 호출할 수 있다.
비동기적 처리의 예시
setTimeout을 이용하면 setTimeout으로 설정한 작업이 백그라운드에서 실행기되 때문에 기존 코드의 흐름을 막지 않고 동시에 다른 작업들을 진행할 수 있다.
function work() {
setTimeout(() => {
const start = Date.now();
for (let i =0; i < 1000000000; i++) {
}
const end = Date.now();
console.log(end - start + 'ms');
}, 0);
// 0으로 설정했지만 실제로는 4ms 이후에 실행된다.
}
console.log('작업 시작');
// 가장 먼저 출력된다.
work();
// 마지막으로 출력된다.
// 비동기적 처리
console.log('다음 작업');
// 두 번째로 출력된다.
function work(callback) {
// work함수에 callback 함수를 파라미터로 전달해준다.
setTimeout(() => {
const start = Date.now();
for (let i =0; i < 1000000000; i++) {}
const end = Date.now();
console.log(end - start + 'ms');
callback();
//작업이 끝난 후에 callback 함수를 호출한다.
}, 0);
}
console.log('작업 시작');
// 가장 먼저 출력된다.
work(() => {
console.log('작업이 끝났어요');
});
// callback 함수에 실행문을 넣어준다.
// work 함수가 작업된 후에 '작업이 끝났어요'가 출력된다.
console.log('다음 작업');
// 두 번째로 출력된다.