[javascript] 자바스크립트의 비동기 제어와 멀티스레딩
자바스크립트는 싱글 스레드 언어이지만, 비동기적으로 동작하여 멀티스레딩과 유사한 효과를 얻을 수 있습니다. 이를 가능하게 하는 주요 개념은 이벤트 루프와 콜백 함수, 프로미스, 비동기 함수 등이 있습니다.
1. 비동기 프로그래밍
JavaScript의 비동기 프로그래밍은 함수가 완료될 때까지 기다리지 않고 다음 코드를 실행할 수 있는 메커니즘입니다. 비동기 작업은 네트워크 요청, 파일 읽기, 타이머 등의 작업에 유용하며, 이러한 작업은 단일 스레드에서 처리하기에 적합합니다.
1.1. 콜백 함수
function fetchData(callback) {
setTimeout(() => {
const data = 'Some data';
callback(data);
}, 1000);
}
fetchData((data) => {
console.log(data);
});
1.2. 프로미스
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = 'Some data';
resolve(data);
}, 1000);
});
}
fetchData().then((data) => {
console.log(data);
});
2. 멀티스레딩과 웹 워커
웹 워커는 JavaScript에서 멀티스레딩을 지원하기 위한 기술입니다. 웹 워커는 백그라운드에서 스크립트를 실행함으로써, 웹 애플리케이션의 주 스레드를 블로킹하지 않으면서 병렬로 작업을 수행할 수 있도록 합니다.
2.1. 웹 워커 생성
const worker = new Worker('worker.js');
worker.onmessage = (event) => {
console.log('Message from worker:', event.data);
};
2.2. 웹 워커 스크립트 (worker.js)
self.onmessage = (event) => {
const data = event.data;
// Perform time-consuming task
self.postMessage('Task completed');
};
자바스크립트에서는 이와 같은 비동기 제어와 웹 워커를 활용하여 멀티스레딩과 유사한 효과를 얻을 수 있습니다.
결론
자바스크립트는 비동기적으로 동작하는 싱글 스레드 프로그래밍 언어이지만, 이벤트 루프, 콜백 함수, 프로미스, 웹 워커를 통해 비동기 제어와 멀티스레딩과 유사한 동작을 지원합니다.
참고 자료: