싱글스레드와 멀티스레드

이준엽·2023년 4월 7일
6

Backend

목록 보기
3/5

처음 개발을 시작할 땐 자바로 시작했지만 실무에선 노드환경에서 개발중이다. 둘의 차이점과 앞으로 개발을 할 때 어느 기술을 사용할 지 선택하는 상황이 온다면 비교할 수 있도록 정리를 해봤다.

싱글 스레드

특징:

  • 한 번에 하나의 작업만 처리할 수 있다.
  • 노드(Node.js)는 주로 싱글 스레드를 사용하며, 비동기 I/O를 활용하여 동시에 여러 요청을 처리할 수 있다.
    (이벤트 드리븐: 비동기 I/O 작업을 효과적으로 처리할 수 있는 이벤트 루프를 사용)

장점:

  • *컨텍스트 스위칭으로 인한 오버헤드가 없다.
  • 동기화 문제가 발생하지 않으므로 코드가 상대적으로 간단하고 이해하기 쉽다.

*컨텍스트 스위칭: 운영체제가 CPU를 하나의 프로세스나 스레드에서 다른 프로세스나 스레드로 전환하는 과정. 여러 프로세스나 스레드가 동시에 실행되는 환경에서 발생.

단점:

  • CPU 코어를 효율적으로 활용하지 못하여 성능이 제한될 수 있다.
  • 노드(Node.js)의 경우, *CPU 집약적인 작업을 처리할 때 병목 현상이 발생할 수 있다.

*CPU 집약적인 작업: 암호화/복호화, 데이터 압축/해제, 렌더링, 인공지능/머신러닝, 수치해석 및 시뮬레이션, 컴파일 등의 작업

멀티 스레드

특징:

  • 여러 개의 스레드를 동시에 실행하여 병렬 처리를 가능하게 한다.
  • 자바(Java)는 멀티 스레드를 지원하며, 동기화 및 스레드 관리 기능을 제공한다.

장점:

  • 여러 개의 CPU 코어를 활용하여 CPU 집약적인 작업을 효율적으로 처리할 수 있다.
  • 동시에 여러 작업을 처리할 수 있어서 시스템의 처리량이 증가한다.

단점:

  • 컨텍스트 스위칭으로 인한 오버헤드가 발생한다.
  • 멀티 스레드 환경에서 자원 경쟁이 발생할 수 있으며, *동기화 문제가 발생할 가능성이 있다.
  • 스레드 간의 동기화 문제로 인해 코드가 복잡해질 수 있고, 디버깅이 어려워진다.

*동기화 문제: 여러 스레드가 공유 자원에 동시에 접근하려고 할 때 발생하는 문제.

결론적으로, 노드(Node.js)와 자바(Java)에서 싱글 스레드와 멀티 스레드를 사용하는 것은 애플리케이션의 요구 사항과 성능 목표에 따라 선택할 수 있다. 노드(Node.js)는 비동기 I/O를 통해 동시성을 처리하는 데 적합한 반면, 자바(Java)는 멀티 스레드를 활용하여 병렬 처리를 구현하는 데 강점을 가진다.

profile
하루하루 차근차근 발전하는사람이 되자 😤

0개의 댓글