싱글스레드 vs 멀티스레드

서동수·2022년 8월 27일
0

스레드
스레드는 프로세스가 할당받은 자원을 이용하는 실행 단위이다.

많이 사용하는 크롬 브라우정에서 유투브, 네이버, Gmail을 띄워놓고 있다면
크롬을 프로세스로 유투브, 네이버, Gmail을 각각 스레드라고 볼 수 있다.

싱글스레드
일련의 처리를 단일 스레드만으로 직렬 처리

장점

  • 자원을 동시에 사용하지 않기 때문에 동기화를 신경쓰지 않아도 된다.
  • context switching 비용을 아낄 수 있다.

단점

  • 여러개의 CPU를 활용하지 못한다. 프로세서를 최대한 사용하기 위해 cluster모듈을 사용하거나
    외부에서 프로그램 인스턴스를 여러개 실행시키는 방법을 사용해야 한다.(메모리는 공유하지 못한다.)
  • 연산량이 많을 경우 직렬처리의 한계로 완료되기 까지 대기해야 한다.
  • 에러가 발생하면 멈춘다.

멀티스레드
동일 어드레스 공간의 메모리를 공유하면서 병렬로 처리

장점

  • 동시에 여러 실행단위를 실행할 수 있다.
  • 서버의 경우 다양한 요청을 효율적으로 수행할 수 있는 환경을 제공한다.
  • context switching이 빠르다(프로세스에 비해, 스택, 레지스터만 교환하고 공유자원은 교환하지 않기에)
  • 멀티코어에서 병렬로 수행될 수 있다.
  • 에러발생시 새로운 스레드를 생성해 극복이 가능하다.

단점

  • 임계영역 (2개 이상이 스레드가 동시에 실행되며 문제를 일으키는 코드영역)
  • 동기화(공유 자원에 접근할때 다른 스레드에서 사용 중인 값을 읽어오게 되면 동기화 문제가 발생할 수 있음)
  • CPU연산이 적은 작업을 싱글스레드에서 실행하고 멀티스레드에서 나눠 실행하게 되면
    반드시 멀티스레드가 효과적이지 않을 수 있다. 오버헤드가 발생하기 때문이다.
  • 스레드를 많이 사용하는 만큼 자원을 많이 사용하게 되고 난이도가 높다.
profile
devLog

0개의 댓글