Post

싱글스레드

싱글 스레드 (Single Thread)

소개

싱글 스레드(Single Thread)는 컴퓨팅에서 하나의 스레드가 순차적으로 작업을 처리하는 방식을 의미합니다. JavaScript는 대표적인 싱글 스레드 언어로, 이는 한 번에 하나의 작업만 실행할 수 있음을 의미합니다. 싱글 스레드 모델은 코드의 실행 순서와 비동기 작업의 관리에 중요한 개념입니다.

싱글 스레드의 특징

단일 작업 처리

싱글 스레드 환경에서는 한 번에 하나의 작업만 실행됩니다. 작업이 완료되기 전까지는 다른 작업이 실행되지 않습니다. 이로 인해 코드의 실행 순서가 예측 가능해집니다.

이벤트 루프

JavaScript는 싱글 스레드임에도 불구하고 비동기 작업을 효율적으로 처리하기 위해 이벤트 루프(Event Loop)를 사용합니다. 이벤트 루프는 호출 스택(Call Stack)과 태스크 큐(Task Queue)를 관리하여 비동기 작업을 처리합니다.

싱글 스레드의 동작 방식

호출 스택

호출 스택은 실행할 함수가 쌓이는 스택 구조입니다. 함수가 호출되면 스택의 맨 위에 쌓이고, 함수의 실행이 완료되면 스택에서 제거됩니다.

이벤트 루프와 태스크 큐

이벤트 루프는 호출 스택이 비어 있는지 확인하고, 비어 있으면 태스크 큐에서 대기 중인 작업을 호출 스택으로 이동시켜 실행합니다. 이 과정을 반복하여 비동기 작업을 처리합니다.

예제

1
2
3
4
5
6
7
console.log('첫 번째 작업');

setTimeout(() => {
  console.log('비동기 작업');
}, 1000);

console.log('두 번째 작업');

위 코드에서 setTimeout은 비동기 함수로, 태스크 큐에 작업을 추가합니다. 호출 스택이 비어 있는 경우 이벤트 루프가 태스크 큐에서 작업을 꺼내어 실행합니다. 따라서 출력 순서는 다음과 같습니다:

1
2
3
첫 번째 작업
두 번째 작업
비동기 작업

싱글 스레드의 장단점

장점

  1. 단순성: 코드의 실행 순서가 예측 가능하여 디버깅이 쉽습니다.
  2. 동기화 문제 최소화: 멀티 스레드 환경에서 발생하는 동기화 문제를 피할 수 있습니다.

단점

  1. 성능 한계: 한 번에 하나의 작업만 처리할 수 있어 CPU 코어를 효율적으로 사용하지 못합니다.
  2. 블로킹 문제: 긴 작업이 실행되면 다른 작업이 블로킹될 수 있습니다.

결론

싱글 스레드는 JavaScript의 기본 실행 모델로, 단일 스레드에서 작업을 순차적으로 처리합니다. 이벤트 루프를 통해 비동기 작업을 효율적으로 처리할 수 있으며, 단순성과 동기화 문제를 피할 수 있는 장점이 있습니다. 그러나 성능상의 한계와 블로킹 문제를 해결하기 위해 비동기 프로그래밍과 최적화 기법이 필요합니다.

다음시간에 계속…

image

This post is licensed under CC BY 4.0 by the author.