싱글 스레드와 멀티 스레드

leekoby·2023년 3월 27일
0

운영체제

목록 보기
4/7
post-thumbnail

🔧변경내용🔨

제목날짜내용
발행일23.03.27

📌들어가기에 앞서

해당 포스트는 싱글 스레드와 멀티 스레드에 대해 학습한 내용을 정리하며 기록한 것입니다.




싱글 스레드와 멀티 스레드

스레드는 싱글 스레드와 멀티 스레드가 있다.
[그림] 프로세스와 싱글 스레드, 멀티 스레드 예시




싱글 스레드(Single-Thread)

프로세스가 단일 스레드로 동작하는 방식

처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법

하나의 레지스터, 스택으로 표현

자바스크립트가 가장 대표적인 싱글 스레드 언어


싱글 스레드의 장점

  • 자원 접근에 대한 동기화를 신경쓰지 않아도 된다.

    • 여러 개의 스레드가 프로세스의 자원을 공유할 경우, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근을 제어해야 한다.
    • 모든 스레드가 일정 자원에 동시에 접근하거나, 똑같은 작업을 실행하려는 경우, 에러가 발생하거나 원하는 값이 나오지 않는다.
    • 그래서, 스레드들이 동시에 같은 자원에 접근하지 못하도록 제어해줘야만 한다.
  • 자원 접근에 대한 동기화를 신경쓰지 않아도 되므로 문맥 교환(context switch) 작업 또한 요구하지 않는다.

    • 문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요
  • 프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용


싱글 스레드의 단점

  • 여러 개의 CPU를 활용하지 못함.

    • 싱글 스레드는 하나의 물리적 코어밖에 사용하지 못해 멀티 코어 머신에서 CPU 사용을 최적화할 수 없다.

    • 최적화를 위해선 Cluster 모듈을 이용하여 여러 프로세스를 사용할 수 있다.

    • 하지만 앞서 프로세스끼리의 자원 공유는 어렵기 때문에 Redis와 같은 부가 인프라가 필요

  • 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있다.

  • 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춤.

    • 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복





멀티 스레드 (Multi-Thread)

일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행

멀티 스레드(multi thread)란

  • 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행

  • 멀티 프로세스(multi process)는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행

시스템 자원의 활용 극대화 및 처리량 증대할 수 있어 단일 프로세스 시스템의 효율성을 높일 수 있다.


멀티 스레딩의 장점

  • 싱글 스레드인 경우, 작업이 끝나기 전까지 사용자에게 응답하지 않지만
    반면 멀티스레드인 경우 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있다.

  • 싱글 스레드인 경우 한 프로세스는 오직 한 프로세서에서만 수행 가능하지만
    반면 멀티 스레드인 경우 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 훨씬 효율적


멀티 스레딩의 문제점

  • 주의 깊은 설계가 필요하며, 디버깅이 까다롭다.

  • 단일 프로세스 시스템의 경우 효과를 기대하기 어려우며 다른 프로세스에서 스레드를 제어할 수 없다.

    • 즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.
  • 멀티 스레드의 경우 자원 공유의 문제가 발생

    • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받게 된다.
  • 문맥 교환 작업을 요구

    • CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 문맥 교환(Context Switching)이라 한다.

    • 문맥 교환이란 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행 중인 태스크(프로세스, 스레드)를 멈추는 것

관련 키워드
데드락(Deadlock, 교착 상태)
뮤텍스(Mutex), 세마포어(Semaphore)





동시성과 병렬성의 차이

[그림] 싱글 코어와 멀티 코어 예시

동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한

운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행

이런 방식을 시분할이라고 한다.

  • Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴

  • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨




📚 레퍼런스

코드스테이츠 수업자료

0개의 댓글