동기와 비동기
동기
- 동기는 코드를 순서대로 처리하는 방식을 의미합니다. 프로그래밍 언어는 기본적으로 위아래로, 왼쪽에서 오른쪽으로 읽히면서 실행되는데, 이때 처리가 오래걸리는 코드를 만나면 작업을 전부 처리할때 까지 기다렸다가 작업이 처리가 완료되면 다음코드로 넘어가 코드를 실행하는 방식을 의미합니다.
- 동기적 처리는 코드를 이해하는데 직관적이지만 다음 코드 실행까지 시간이 걸렸을때 응답시간이 지체되어 사용성이 떨어진다는 단점이 있습니다.
자바스크립트 동기적 코드
function synchronousFunction() {
console.log("첫 번째 작업");
console.log("두 번째 작업");
console.log("세 번째 작업");
}
synchronousFunction();
//첫 번째 작업
//두 번째 작업
//세 번째 작업
비동기
- 비동기는 작업의 완료를 기다리지 않고 다음 코드를 먼저 실행하는 방식을 의미합니다. 처리가 지연된 작업은 백그라운드로 이동시켜 동시에 작업을 처리합니다. 작업을 비동기로 처리했을떄, 처리가 지연되는 작업을 기다리지 않고 다른 코드를 실행할 수 있어 응답속도가 빨라지고, 동시에 여러가지 작업을 처리할 수 있다는 특징이 있습니다. 비동기를 처리하기 위한 문법들을 사용하여 코드의 복잡성이 증가하고, 작업을 동시에 처리하기 때문에 작업순서를 보장할 수 없다는 단점이 있습니다.
- 비동기 처리 예시 : DOM객체, 이벤트 리스너, 프로미스, async/await, AJAX, setTimeout, 콜백함수 등
자바스크립트 비동기적 코드 예시
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function doAsyncTask() {
await delay(1000);
console.log("비동기 작업 완료");
}
async function main() {
console.log("비동기 작업 시작");
try {
await doAsyncTask();
console.log("모든 작업 완료");
} catch (error) {
console.error("에러 발생:", error);
}
}
main();
프로스세와 스레드
프로세스
- 프로세스란 메모리에 올라와 실행되고 있는 프로그램을 의미합니다. 프로세스가 실행되면 보조기억장치에 저장되어 있던 데이터가 메모리에 적재되어 운영체제로부터 자원을 할당받아 프로세스를 실행하게 됩니다. 프로세스는 메모리에 각각의 독립적인 공간을 가집니다. 서로의 메모리 공간에 접근하는것이 불가능하며, 특정 프로세스에 문제가 발생해도 다른 프로세스에는 영향을 주지 않습니다.
스레드
- 스레드란 프로세스내에서 실행되는 하나의 실행흐름입니다. 프로세스가 운영체제로 부터 자원을 할당받아 프로세스를 실행 시킬떄 프로세스는 1개 이상의 스레드를 가지게 됩니다. 스레드는 프로세스가 가진 자원을 스레드끼리 공유할 수 있어 자원생성시 발생하는 오버헤드를 줄이고, 메모리에 적재된 자원의 중복을 방지할 수 있습니다.