스레드 = 실
프로세스의 스레드란 컴퓨터 프로그램이 작업을 수행하기 위해 사용하는 실행 경로의 가장 작은 단위이다. 간단히 말해서, 스레드는 프로세스 내에서 실제로 작업을 수행하는 부분이다.
프로세스와 스레드의 관계를 이해하려면 먼저 프로세스의 개념을 알아야 한다. 프로세스는 실행 중인 프로그램의 인스턴스로, 운영체제에서 할당된 자원(메모리, 파일 핸들 등)과 함께 실행된다. 각 프로세스는 최소 하나 이상의 스레드를 가지고 있으며, 이러한 스레드들은 프로세스가 할당받은 자원을 사용하여 작업을 수행한다.
목적을 이루는 작업을 하기 위해서는 자원을 할당받은 프로세스는 제어를 통해 원하는 목적을 이루는 과정이 있다. 이 중 제어 과정은 스레드와 큰 관련이 있다. 프로세스는 하난데 제어하는 것은 여러 개 있을 수 있다.
프로세스는 리소스를 제어하는 일을 한다. 리소스는 코드, 전역 데이터, 힙 영역이 있다. 프로세스는 제어 정보, 지역 데이터, 스택 영역 등이 있다.
스레드는 여기서 각각 제어를 할 수 있다.
제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유
전통적 프로세스 = 단일 스레드 프로세스
컨텍스트 스위칭(Context Switching) 은 운영체제에서 멀티태스킹을 수행하기 위해 사용되는 프로세스, 쓰레드 간에 CPU 제어권을 전환하는 과정이다. 이 과정은 CPU가 현재 실행 중인 태스크(프로세스 또는 쓰레드)를 중지하고 다른 태스크를 실행하기 위해 발생한다. 컨텍스트 스위칭은 필수적인 과정이지만, 성능에 영향을 미칠 수 있다. 스위칭 과정에서는 실제 유용한 작업을 수행하지 않고 시스템 자원을 소모하기 때문이다.
사용자 수준 스레드
커널 수준 스레드
그렇기 때문에 장점만을 모은 다대다 스레드 모델을 구축했다.
혼합형 (다대다) 스레드
스레드의 주요 특징은 다음과 같다:
경량 프로세스(Lightweight Process): 스레드는 프로세스보다 더 작은 실행 단위로, 프로세스 내에서 병렬로 실행될 수 있다.
자원 공유: 하나의 프로세스 내에 있는 스레드들은 그 프로세스의 메모리와 자원을 공유한다. 이는 스레드 간 통신을 용이하게 하지만, 동시에 데이터의 무결성 문제를 일으킬 수도 있다.
병렬 처리: 멀티 스레딩을 사용하면 여러 작업을 동시에 처리할 수 있어 프로그램의 효율성이 향상된다. 예를 들어, 웹 브라우저는 한 스레드에서 웹 페이지를 로드하는 동안 다른 스레드에서 사용자 입력을 처리할 수 있다.
컨텍스트 스위칭(Context Switching): 스레드 간의 컨텍스트 스위칭은 프로세스 간 스위칭보다 비용이 적게 든다. 이는 스레드가 프로세스의 자원을 공유하기 때문에 발생한다.
스레드를 효율적으로 사용하면 프로그램의 성능을 크게 향상시킬 수 있지만, 동시성 관리와 데이터 동기화에 주의해야 한다.
스레드에 관해 자세하게 작성된 글이네요 화이팅입니다