제목 날짜 내용 발행일 23.03.27
해당 포스트는
싱글 스레드와 멀티 스레드
에 대해 학습한 내용을 정리하며 기록한 것입니다.
스레드는 싱글 스레드와 멀티 스레드가 있다.
프로세스가 단일 스레드로 동작하는 방식
처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법
하나의 레지스터, 스택으로 표현
자바스크립트가 가장 대표적인 싱글 스레드 언어
자원 접근에 대한 동기화를 신경쓰지 않아도 된다.
자원 접근에 대한 동기화를 신경쓰지 않아도 되므로 문맥 교환(context switch) 작업 또한 요구하지 않는다.
프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용
여러 개의 CPU를 활용하지 못함.
싱글 스레드는 하나의 물리적 코어밖에 사용하지 못해 멀티 코어 머신에서 CPU 사용을 최적화할 수 없다.
최적화를 위해선 Cluster 모듈을 이용하여 여러 프로세스를 사용할 수 있다.
하지만 앞서 프로세스끼리의 자원 공유는 어렵기 때문에 Redis와 같은 부가 인프라가 필요
연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있다.
싱글 스레드 모델은 에러 처리를 못하는 경우 멈춤.
일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행
멀티 스레드(multi thread)란
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행
멀티 프로세스(multi process)는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행
시스템 자원의 활용 극대화 및 처리량 증대할 수 있어 단일 프로세스 시스템의 효율성을 높일 수 있다.
싱글 스레드인 경우, 작업이 끝나기 전까지 사용자에게 응답하지 않지만
반면 멀티스레드인 경우 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있다.
싱글 스레드인 경우 한 프로세스는 오직 한 프로세서에서만 수행 가능하지만
반면 멀티 스레드인 경우 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 훨씬 효율적
주의 깊은 설계가 필요하며, 디버깅이 까다롭다.
단일 프로세스 시스템의 경우 효과를 기대하기 어려우며 다른 프로세스에서 스레드를 제어할 수 없다.
멀티 스레드의 경우 자원 공유의 문제가 발생
문맥 교환 작업을 요구
CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 문맥 교환(Context Switching)이라 한다.
문맥 교환이란 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행 중인 태스크(프로세스, 스레드)를 멈추는 것
관련 키워드
데드락(Deadlock, 교착 상태)
뮤텍스(Mutex), 세마포어(Semaphore)
동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한
운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행
이런 방식을 시분할이라고 한다.
Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨