👉 소프트웨어 스레드 개념
- 소프트웨어 측면의 스레드는 프로그램 내에서 실행되는 독립적인 작업 단위
- 프로그램이 동시에 여러 작업을 수행할 수 있게 하는 것
- 예를 들어, 웹 브라우저에서 하나의 탭은 하나의 스레드가 될 수 있음
- 사용 예시
- 데이터베이스 쿼리, 파일 I/O, 사용자 인터페이스 갱신 등 다양한 작업을 동시에 수행해야 할 때 스레드를 사용
👉 소프트웨어 스레드 역할
- 비동기 처리
- 여러 작업을 동시에 수행해야 할 때 스레드를 사용
- 리소스 공유
- 같은 프로세스 내의 스레드끼리는 메모리와 변수 등을 공유할 수 있음
- 작업 분할
- 복잡하고 시간이 많이 걸리는 작업을 여러 스레드로 나눠서 빠르게 처리할 수 있음
👉 하드웨어 스레드 개념
- 하드웨어 측면의 스레드는 CPU의 물리적인 코어에서 실행되는 명령어의 시퀀스
- CPU에서 실제로 명령어를 처리하는 단위
- CPU에는 여러 개의 코어가 있고, 각 코어는 하나 이상의 하드웨어 스레드를 처리할 수 있음
- 사용 예시
- 인텔의 하이퍼스레딩 기술은 물리적인 코어 하나가 두 개의 하드웨어 스레드를 동시에 처리할 수 있게 해줌
👉 하드웨어 스레드 역할
- 명령어 실행
- CPU는 하드웨어 스레드를 통해 실제로 명령어를 실행
- 병렬 처리
- 다중 코어나 다중 스레딩 기능을 가진 CPU는 여러 하드웨어 스레드를 동시에 처리할 수 있음
👉 소프트웨어 스레드와 하드웨어 스레드의 연관 관계
- 운영체제의 역할
- 운영체제가 소프트웨어 스레드를 관리해서, 어떤 스레드가 어떤 하드웨어 스레드 (CPU 코어) 에서 실행될지를 결정
- 이를
스케줄링
이라고 함
- 시간 분할
- 하드웨어 스레드가 한정되어 있기 때문에, 여러 소프트웨어 스레드는 '턴'을 돌아가며 하드웨어 스레드를 사용
- 즉, 운영체제는 각 소프트웨어 스레드에게 일정 시간을 할당하여 CPU의 사용을 균등하게 분배
- 하드웨어 한계
- CPU 코어의 수가 제한되어 있으므로, 동시에 실행할 수 있는 소프트웨어 스레드의 수도 제한됨
- 만약 CPU 코어가 4개라면, 최대 4개의 작업만 실제로 '동시에' 처리할 수 있음
- 컨텍스트 스위칭
- 하나의 하드웨어 스레드 (CPU 코어) 가 다른 소프트웨어 스레드로 변경될 때, 정보를 저장하고 불러오는 작업이 발생
- 이러한 작업을 '컨텍스트 스위칭'이라고 하며, 이로 인해 약간의 시간이 소요
- 여러 코어와 하이퍼스레딩
- 현대의 CPU는 여러 코어를 가지고 있고, 하이퍼스레딩 같은 기술을 사용해 한 코어에서 두 개의 스레드를 동시에 처리할 수도 있음
- 이렇게 해서 더 많은 소프트웨어 스레드를 효율적으로 실행할 수 있음
- ⇒ 간단히 말해, 소프트웨어 스레드는 프로그램이 여러 작업을 할 수 있게 하고, 하드웨어 스레드는 그 작업들이 실제로 실행되는 '무대'라고 할 수 있음
- 운영체제는 이 두 가지를 잘 조율하여 프로그램이 효율적으로 동작할 수 있도록 함