프로세스, 스레드, 멀티스레드
프로세스 (Process)
프로세스는 실행 중인 프로그램이라고 할 수 있다. 프로그램을 운영체제가 메모리에 올려 실행을 하면 프로세스라고 할 수 있다. 각 프로세스는 독립된 메모리 공간을 가지고 있으며, 운영체제에 의해 관리 된다. 각 프로세스는 실행 중인 프로그램의 인스턴스로, 프로그램 코드, 데이터, 메모리 등을 포함한다. 각각의 프로세스는 다른 프로세스와 독립 되어 있고 서로 영향을 주지 않는다.
스레드 (Thread)
스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 하나의 프로세스에는 여러 개의 스레드가 있을 수 있고 스레드는 프로세스의 자원을 공유하며 각각의 스레드는 독립적인 실행 흐름을 가진다. 스레드는 프로세스의 코드, 데이터를 공유하면서 동시에 여러 작업을 수행할 수 있다.
멀티 스레딩 (Multithreading)
멀티 스레딩은 하나의 프로세스 내에서 여러 개의 스레드가 동시에 작업하는 것을 말한다. 멀티스레딩을 통해 여러 작업을 병렬적으로 처리할 수 있으며, 이는 프로그램의 성능을 향상시킬 수 있다. 하나의 스레드가 작업을 완료하기 전에도 다른 스레드가 작업을 수행할 수 있어서 시스템 자원을 효율적으로 사용할 수 있다.
멀티스레드와 멀티 프로세스의 차이
멀티스레드와 멀티 프로세스는 둘 다 동시에 여러 작업을 수행하기 위한 방법이지만 그 구현과 동작 방식에서 차이가 있다.
멀티스레드는 하나의 프로세스 내에서 여러 스레드가 동시에 실행 되는 것을 의미하며 스레드는 프로세스 내에서 메모리 공간을 공유하고 지원 접근이 간단하고 빠르다.
멀티 프로세스는 여러 개의 독립적인 프로세스가 동시에 실행 되는 것을 의미하는데 각 프로세스는 독립된 메모리 공간을 가지며, 자원 접근이 복잡하고 상대적으로 느리다.
멀티스레드는 프로세스 내의 자원, 즉 메모리, 파일 등을 공유하기 때문에 스레드 간의 데이터 공유가 쉽고 빠르다. 하지만 이로 인해 동기화와 관련된 문제가 발생할 수 있다.
멀티프로세스는 프로세스 자체가 독립된 메모리 공간을 가지고 있기 때문에, 각 프로세스는 자원을 공유하기 위해 별도의 통신 매커니지므이 필요하다. 자원 공유는 안전하지만 통신 비용이 발생할 수 있다.
성능을 비교해보자면
멀티스레드에서 스레드는 프로세스 내에서 메모리를 공유하고 컨텍스트 스위칭 비용이 낮기 때문에, 작업 간의 전환 및 데이터 공유가 빠르다. 하지만 동기화 문제로 인해 예기치 않은 결과가 발생할 수 있다.
멀티프로세스는 프로세스가 독립된 메모리 공간을 가지고 있어 각각의 프로세스는 안전하게 독립적으로 실행 될 수 있다. 하지만 프로세스 간의 통신 및 컨텍스트 스위칭의 비용이 높아 성능상의 오버헤드가 발생할 수 있다.
멀티스레드는 프로세스 내에서 스레드들이 실행되므로 메모리 공간을 공유하여 데이터의 일관성을 유지하기 어렵게 만들 수 있다. 동기화와 관련된 문제를 제대로 처리하지 않으면 예기치 않은 버그가 발생할 수 있다.
멀티프로세스는 프로세스가 독립적인 메모리 공간을 가지고 있으므로 각각의 프로세스는 안전하게 독립적으로 실행 될 수 있다. 하지만 프로세스 간의 통신 및 동기화 문제를 고려해야 한다.
정리하자면 멀티스레드는 데이터 공유가 빠르고 오버헤드가 적지만 이로 인한 동기화 문제가 발생할 수 있고 멀티프로세스는 프로세스가 독립적인 공간을 가지고 있어 안정적이지만 프로세스 간의 통신 및 컨텍스트 스위칭의 비용이 높아 오버헤드가 발생할 수 있다.
'CS' 카테고리의 다른 글
[CS] HTTP Method 종류 (0) | 2023.08.30 |
---|---|
[CS] 운영체제 (5) 교착 상태 (0) | 2023.07.28 |
[CS] 운영체제 (4) 동기화 (0) | 2023.07.27 |
[CS] 운영체제 (3) CPU 스케줄링 (0) | 2023.07.20 |
[CS] 운영체제 (2) 프로세스 (1) | 2023.07.14 |