프로세스와 쓰레드는 컴퓨터에서 실행되는
프로그램의 실행 단위를 나타내는 개념
프로세스는 운영체제에서 실행중인 프로그램의 인스턴스
각 프로세스는 독립적인 메모리 공간, 자원 및 실행 환경을 가진다
각 프로세스는 운영 체제로부터 별도의 메모리 공간을 할당받으며, 서로의 데이터에 직접 접근할 수 없습니다.
프로세스 간 통신은 별도의 메커니즘 (예: 파이프, 소켓, 공유 메모리)을 사용하여 이루어집니다.
각 프로세스는 독립적인 제어 흐름을 가지고 있으므로, 하나의 프로세스가 충돌하더라도 다른 프로세스는 영향을 받지 않습니다.
프로세스 간 전환은 운영 체제가 관리하며, 이로 인해 오버헤드가 발생할 수 있습니다.
쓰레드는 프로세스 내에서 실행되는 작은 실행 단위로, 여러 쓰레드가 하나의 프로세스 내에서 공유된 자원과 메모리 공간을 가집니다.
쓰레드는 프로세스의 자원을 공유하므로, 하나의 쓰레드가 수정한 데이터는 다른 쓰레드에 영향을 줄 수 있습니다.
쓰레드 간 통신은 일반적으로 메모리를 공유하는 방식으로 이루어집니다. 이로 인해 데이터 무결성을 보장하는 것이 중요합니다.
쓰레드는 프로세스 내에서 생성 및 소멸하는 것이 비교적 빠르며, 쓰레드 간 전환 오버헤드가 낮습니다.
독립성: 프로세스는 독립적인 실행 환경을 가지며 서로의 메모리에 직접 접근할 수 없지만, 쓰레드는 같은 프로세스 내에서 실행되므로 메모리를 공유할 수 있습니다.
자원 사용: 프로세스는 더 많은 자원을 소비하며, 쓰레드는 상대적으로 적은 자원을 사용합니다.
통신 및 동기화: 프로세스 간 통신은 별도의 메커니즘을 사용해야 하지만, 쓰레드는 메모리 공간을 공유하므로 데이터 공유와 동기화가 보다 간단하게 이루어집니다.
생성 및 소멸 오버헤드: 쓰레드를 생성하고 소멸하는 것이 프로세스를 생성하고 소멸하는 것보다 빠릅니다.
안전성: 프로세스는 서로 독립적이므로 하나의 프로세스 충돌이 다른 프로세스에 영향을 미치지 않지만, 쓰레드는 메모리를 공유하므로 데이터의 무결성과 동기화에 주의를 기울여야 합니다.