반응형
Windows 운영체제에서의 프로세스(process)와 쓰레드(thread)는 리소스를 사용하여 작업을 수행하는 기본 단위로, 각각의 역할과 동작 방식이 구분됩니다.
Ⅰ. 프로세스(Process)
프로세스(Process) | |
정의 | 실행 중인 프로그램의 인스턴스로, 메모리, 파일 핸들, 환경 변수 등의 시스템 자원을 할당받아 독립적으로 실행되는 작업 단위입니다. 각 프로세스는 운영 체제에 의해 독립된 메모리 공간을 가집니다. |
특징 | 1) 독립적인 메모리 공간을 가짐. 2) 각 프로세스는 운영 체제의 자원을 독립적으로 관리하며, 프로세스 간의 메모리 공유는 불가능 (단, IPC(Inter-Process Communication) 같은 특별한 방법을 통해 데이터를 교환 가능). 문맥 전환(context switching)이 발생할 때마다 CPU가 프로세스의 상태를 저장하고 불러와야 하기 때문에 비교적 오버헤드가 큽니다. 3) 프로세스끼리 자원을 공유하지 않기 때문에 하나의 프로세스에서 문제가 발생해도 다른 프로세스에 영향을 주지 않습니다. |
구조 | 각 프로세스는 자체 주소 공간과 리소스를 갖고, 다른 프로세스와 독립적으로 실행됩니다. 이는 프로그램의 안정성을 보장하는데, 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않습니다. |
프로세스 ID (PID) | Windows는 각 프로세스에 고유한 프로세스 ID를 할당하며, Task Manager(작업 관리자)나 Process Explorer를 통해 확인할 수 있습니다. |
프로세스 간 통신 (IPC) | 프로세스들은 각자의 메모리 영역을 사용하기 때문에 다른 프로세스와 통신할 때, 파이프, 메시지 큐, 메모리 매핑 파일 등 다양한 IPC 방식을 사용합니다. |
사용 예시 | Windows 탐색기(Explorer), 실행파일 같은 애플리케이션이 각각 독립된 프로세스로 실행됩니다. |
Ⅱ. 쓰레드(Thread)
쓰레드(Thread) | |
정의 | 쓰레드는 프로세스 내에서 실행되는 가벼운 작업 단위로, 프로세스의 코드, 데이터, 스택, 힙 등 대부분의 자원을 다른 쓰레드와 공유합니다. 한 프로세스는 여러 개의 쓰레드를 가질 수 있습니다 |
특징 | 1) 같은 프로세스 내에서는 메모리와 자원을 공유합니다. 2) 프로세스의 한 부분이기 때문에 더 적은 오버헤드로 실행됩니다. 3) 쓰레드 간의 통신은 더 빠르지만, 잘못된 메모리 접근이나 동기화 문제가 발생할 수 있습니다. 4) 하나의 쓰레드에서 문제가 발생하면, 해당 프로세스 내 모든 쓰레드에 영향을 줄 수 있습니다 |
구조 | 프로세스 내에서 메모리와 리소스를 공유하며, 메모리 접근 속도가 빠릅니다. 다만, 리소스 공유로 인해 데이터 경합과 같은 동기화 문제가 발생할 수 있습니다. |
스케줄링 | Windows 스케줄러는 우선순위와 상태에 따라 쓰레드의 실행을 관리하며, 일반적으로 Round-Robin이나 Priority-Based 방식으로 스케줄링을 수행합니다. |
사용 예시 | 웹 브라우저의 각 탭은 별도의 쓰레드로 실행되어 멀티탭 기능을 제공합니다. |
Ⅲ. 프로세스(Process)와 쓰레드(Thread) 차이점
프로세스(Process) | 쓰레드(Thread) | |
메모리 사용 | 독립적 메모리 영역 | 공유 메모리 영역 |
통신 방법 | IPC 사용 | 프로세스 내 메모리 직접 공유 |
안정성 | 프로세스 문제 시, 다른 프로세스 영향 없음 | 쓰레드 문제 시, 프로세스 전체에 영향 |
스케줄링 방식 | 프로세스 간 독립적 스케줄링 | 프로세스 내부에서 개별 스케줄링 가능 |
생성 비용 | 상대적으로 큼 | 상대적으로 적음 |
Ⅳ. 멀티 프로세스(Multi-processing)
멀티 프로세스(Multi-processing) | |
정의 | 멀티 프로세스는 하나의 작업을 여러 개의 독립적인 프로세스로 분리하여 실행하는 방식입니다. 각 프로세스는 자신의 메모리 공간을 따로 가지며, 서로 독립적으로 실행됩니다. |
장점 | 1) 안정성: 하나의 프로세스가 문제를 일으켜도 다른 프로세스에는 영향을 미치지 않습니다. 예를 들어, 한 프로세스가 비정상적으로 종료되어도 다른 프로세스는 계속해서 실행될 수 있습니다. 2) 보안: 프로세스 간의 메모리 접근이 불가능하므로, 프로세스 간의 데이터 보호가 용이합니다. |
단점 | 1) 높은 오버헤드: 프로세스 간 문맥 전환 시 CPU 오버헤드가 큽니다. 각 프로세스가 독립적인 메모리 공간을 사용하기 때문에 메모리 사용량이 많아지고, 프로세스 간의 통신은 비용이 많이 듭니다. 2) 복잡한 통신: 프로세스 간의 통신을 위해 IPC(Inter-Process Communication) 기술을 사용해야 하므로, 구현이 복잡합니다. |
Ⅴ. 멀티 쓰레드(Multi-threading)
멀티 쓰레드(Multi-threading) | |
정의 | 멀티 쓰레드는 하나의 프로세스 내에서 여러 쓰레드를 동시에 실행하는 방식입니다. 이들 쓰레드는 하나의 프로세스 내 자원을 공유하며, 동시에 여러 작업을 처리할 수 있습니다. |
장점 | 1) 빠른 통신: 같은 메모리 공간을 공유하므로 쓰레드 간 통신이 빠르고 간편합니다. 이는 동기화나 데이터 공유를 더 쉽게 처리할 수 있음을 의미합니다. 2) 낮은 오버헤드: 프로세스 내에서 실행되기 때문에 문맥 전환이 프로세스보다 가볍고, 자원을 공유하여 메모리 사용량도 적습니다. 3) 높은 성능: CPU의 여러 코어를 활용하여 병렬로 작업을 처리할 수 있으므로 응답 속도와 처리 속도를 향상시킵니다. |
단점 | 1) 동기화 문제: 여러 쓰레드가 동시에 같은 자원에 접근하면, 잘못된 접근으로 인해 데이터 경쟁(race condition), 교착 상태(deadlock) 등이 발생할 수 있습니다. 이를 방지하기 위해 적절한 동기화가 필요합니다. 2) 취약성: 하나의 쓰레드에서 발생한 문제가 프로세스 전체에 영향을 미칠 수 있습니다. 예를 들어, 하나의 쓰레드가 비정상 종료되면, 프로세스의 다른 쓰레드에도 영향을 미쳐 전체 프로세스가 종료될 수 있습니다. |
Ⅵ. 멀티 프로세스(Multi-processing)와 멀티 쓰레드(Multi-threading) 차이점
멀티 프로세스 | 멀티 쓰레드 | |
메모리 사용 | 독립된 메모리(많음) | 메모리 공유 (적음) |
안정성 | 하나의 프로세스 문시, 다른 프로세스 영향 없음 | 하나의 쓰레드 문제 시, 프로세스 전체 영향 |
통신 방법 | IPC 사용, 상대적으로 느림 | 메모리 직접 공유로 빠름 |
생성 비용 | 프로세스 생성 비용 많음 | 쓰레드 생성 비용 적음 |
동기화 문제 | 동기화 문제 없음 | 발생 가능 (데드락, 레이스 컨디션 등) |
:
반응형
'시스템(Windows)' 카테고리의 다른 글
Windows 운영체제에서의 가상 메모리에 대해 알아보겠습니다. (0) | 2024.11.08 |
---|---|
윈도우 환경에서 환경 변수 (0) | 2024.11.03 |
드라이브 용량 증설을 하려고 했으나 볼륨 확장 버튼이 비활성화 조치 방법 (2) | 2024.10.14 |
Windows 운영체제에서 Apache 설치 (1) | 2024.10.03 |
chkdsk(Check Disk) 명령어에 대해 알아보겠습니다. (0) | 2024.10.01 |