이미지 출처 : https://velog.io/@raejoonee/프로세스와-스레드의-차이
프로그램 >> 프로세스 >> 스레드
프로그램
프로세스
스레드
프로세스는 각각 독립된 메모리 영역을 할당받으므로, 다른 프로세스에 접근이 어렵습니다.
이와 다르게 스레드는 메모리를 서로 공유할 수 있다는 차이가 있습니다.
프로세스간 자원공유를 위해 별도의 IPC를 구현해야 합니다.
스레드는 프로세스가 할당받은 메모리 영역 내에서 Stack 메모리 영역은 따로 할당받고, 나머지 Code/Data/Heap 메모리 영역을 공유하기에 메모리 절약을 할 수 있습니다.
IPC
- 프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법을 뜻합니다.
멀티 프로세싱
멀티 프로그래밍
멀티 태스킹
멀티 스레드
멀티 프로세스
IPC
를 통해야 하며 메모리 사용량이 많습니다.Global Intepreter Lock의 약자로 하나의 스레드에 모든 자원을 허락하고 나머지 스레드에 락을 걸어 다른 스레드가 실행되지 않도록 막아버리는 기능입니다.
현시점 한 스레드만 실행할 수 있는 것입니다.
파이썬에서 멀티 스레드를 사용했을 때 오히려 성능이 저하될 수 있습니다.
ㄴ lock 획득,해제로 인한 오버헤드로 실행 시간이 더 길어질 수 있기 때문입니다.
오버헤드
- 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등을 말합니다.
파이썬에서 멀티스레드는 의미가 없나?
GIL은 cpu동작에서 적용되는것을 말하며, cpu동작을 마치고 I/O (데이터 입/출력
)작업을 실행하는 동안에는 다른 스레드가 동시에 동작할 수 있습니다.
즉, I/O작업이 많은 병렬 처리 프로그램에서 유용하게 사용할 수 있습니다.