멀티 프로세싱이라면 : 하나의 파이썬 파일을 자식 프로세스로 복제하여 진행
멀티 스레딩은 하나의 프로세스에서 스레드를 여러개 만들어서 진행 : 이 스레드들끼리 메모리를 공유한다.
개중 하나의 스레드에서 계산을 하다가 에러가 나면 다른 스레드들도 에러가 생길수 있다.
따라서 이 멀티 스레딩으로 병렬 계산을 하는것은 위험 할 수 있음
그래서 GIL(global interpreter lock) 도입
한번에 1개의 스레드만 유지하는 락 : 병렬성 x
이 때문에 파이썬에서는 스레드로 병렬성 연산을 수행하지 못함
대신 동시성(concurrency)를 사용해서 io바운드 코드에서 활용 가능
하지만 연산 레벨의 cpu bound에서는 활용이 어려움
이를 보완하는게 멀티 프로세싱
프로세스들을 공유하고 각 프로세스들 끼리 메모리 공유x, 프로세스들 끼리 통신을 해야함.
멀티 프로세싱을 사용하면 통신 - 직렬화/역직렬화에 대한 비용이 크다.
이러한 비용을 감수하더라도 성능/속도의 이점을 누리고 싶을 때, 멀티 프로세싱 사용.
cpu 집약적인 연산을 할 때에는 : 멀티 프로세싱>동기적 연산 > 멀티 스레딩