동기(Synchronous) & 비동기(Asynchronous)
- 동기
- 코드가 작성된 순서대로 실행되는 방식
- 한 라인이 실행될 때까지 다음 라인으로 넘어가지 않음
- 비동기
- 코드가 순차적으로 실행되지 않음
- 코드가 실행되는 동안 이벤트 루프가 다음 코드를 실행하도록 대기
# 동기적 코드 예시
console.log('1');
console.log('2');
console.log('3');
1
2
3
# 비동기적 코드 예시
console.log('1');
setTimeout(() => {
console.log('2');
}, 1000);
console.log('3');
1
3
2
프로세스(Process) & 스레드(Thread)
프로세스와 스레드는 컴퓨터에서 실행되는 작업의 단위이다.
프로세스는 운영체제로부터 자원을 할당받아 독립적으로 실행되며, 스레드는 프로세스 내에서 실행되어 프로세스가 할당받은 자원을 공유함.
- 프로세스
- 운영체제로부터 자원을 할당받은 작업의 단위
- 각각 독립된 메모리 영역을 할당 (최소 1개)
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음
- 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 함
- 스레드
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
- 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유
- 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행
- Code : 실행 명령을 포함하는 코드들
- Data : Static 변수 혹은 Global 변수
- Heap : 동적 메모리 영역
- Stack : 지역변수, 매개변수, 반환 값 등 일시적인 데이터