알고 싶은 점
•
컴퓨터 스펙에서 말하는 스레드와 코딩할때 생성하는 스레드의 차이
프로그램/프로세스/스레드
•
프로그램 : 컴퓨터가 실행할 수 있는 명령어 집합
•
프로세스 : 실행중인 프로그램
•
스레드 : 프로세스의 실행 흐름
스레드
1. 특징
•
한 프로세스는 한 개 이상의 스레드 소유
•
한 프로세스 내의 스레드들은 메모리 영역 공유(stack 영역은 제외)
→ Context Switch와 스레드 간의 통신 시 비용이 적고 응답 속도 빠름
2. 스레드의 분류
하드웨어 스레드
•
컴퓨터 스펙에서 말하는 8코어 16스레드의 그 스레드를 의미
•
물리적으로 프로세스를 실행할 수 있는 공간
→ 코어가 메모리에 접근하는 시간 동안의 대기를 비효율적으로 여겨 그 동안 코어가 다른 연산을 할 수 있도록 코어의 사용률을 극대화
OS 스레드
•
Kernel Space에서 생성되고 관리되는 스레드
•
우리가 흔히 말하는 스레드, CPU에서 실행되는 단위(CPU 스케줄링 단위)
User 스레드
•
User Space에서 생성되고 관리되는 스레드
•
User 스레드가 CPU에서 실행이 되려면 결국 커널을 거쳐야 하기 때문에 OS 스레드도 함께 실행
3. 스레드의 모델
One-to-One 모델
•
User 스레드와 OS 스레드가 1:1
→ 스레드 관리는 OS가 진행(스케줄링 포함)
•
하나의 스레드가 막혀도 다른 스레드는 정상적 동작
•
User 스레드를 생성할때마다 OS 스레드가 필요(많은 수의 OS 스레드는 시스템 성능에 부담)
Many-to-One 모델
•
User 스레드와 OS 스레드가 다:1
→ OS 스레드가 하나로 연결되기 때문에 User Space에서만 Context Switching이 일어남
→ One-to-One 모델에 비해 Context Switching이 빠름
•
하나의 스레드가 막히면 전체가 막힘
Many-to-Many 모델
•
User 스레드와 OS 스레드가 다:다
•
하나의 스레드가 막혀도 다른 스레드는 정상적 동작
•
Context Switching이 빠름
•
구현이 복잡
멀티프로그래밍/멀티테스킹/멀티프로세싱/멀티스레딩
1. 멀티프로그래밍
•
단일 프로세스 시스템에선 하나의 프로그램만 실행이 되니, 연산과정에서 CPU의 유후시간이 생김
→ 이러한 유후시간을 이용한 다른 프로세스를 실행시켜 CPU 사용률 증가시킴
•
하나의 프로세스의 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기
2. 멀티테스킹
•
멀티프로그래밍은 하나의 프로세스의 CPU사용 시간이 길어지면 다른 프로세스는 대기하는 문제점 발생
→ 프로세스의 CPU 사용을 아주 짧게 하여 여러 프로세스가 번갈아 사용
→ 사용자는 마치 동시에 작업하는 것처럼 느낌
3. 멀티프로세싱
•
동시에 여러 작업 가능
•
프로세스는 독립적인 메모리 영역 사용
→ Context Switching이 비용이 비싸고 프로세스간 메모리 공유가 쉽지 않음
4. 멀티스레딩
•
멀티프로세싱의 단점을 해결하기 위해 멀티스레딩 개념이 생김
•
한 프로세스 내의 스레드들은 메모리 영역 공유(stack 영역은 제외)
→ Context Switch와 스레드 간의 통신 시 비용이 적고 응답 속도 빠름