프로세스는 자체 메모리를 가진 격리된 프로그램이고, 스레드는 같은 프로세스 내 다른 스레드들과 메모리를 공유하는 실행 단위입니다. 한 프로세스는 여러 스레드를 담을 수 있습니다.
동작 방식
- 프로세스: 자체 주소 공간, 파일 디스크립터, 힙을 가집니다. OS에 의해 격리되어 — 한 프로세스의 크래시나 메모리 버그가 다른 프로세스를 손상시킬 수 없습니다. 컨텍스트 전환과 통신(IPC)이 상대적으로 비쌉니다.
- 스레드: 프로세스 내부에 존재하며 힙과 전역 변수를 공유하지만, 자체 스택과 레지스터를 가집니다. 생성과 전환이 저렴하지만, 메모리를 공유하므로 동기화가 필요합니다.
text
Process A Process B
├─ heap (shared by threads) ├─ heap
├─ Thread 1 (own stack) └─ Thread 1
└─ Thread 2 (own stack)
↑ threads share heap → must lock shared data
예제
python
threading, multiprocessing
counter =
threading.Thread(target=: work(counter)).start()
multiprocessing.Process(target=work, args=(data,)).start()
