파이썬의 멀티프로세싱(multiprocessing) vs Thread
개요 안녕하세요. 오늘은 파이썬의 multiprocessing (프로세스 기반 병렬처리) 에 대해 살펴보려고 합니다. 아시다시피 파이썬은 GIL ( G lobal I nterperter L ock) 메커니즘으로 구현되어 있으며, 이로인해 얻은 이점도 ( Thread-Safe ) 있지만, Multi-Thread 기반 병렬처리에서 많은 손해를 봅니다. 잠깐 상상해 볼까요. 만약 1부터 1억까지 모든 수가 나열된 수열이 있고, 이를 모두 더한 합을 구하고 싶습니다. 싱글쓰레드, 멀티쓰레드, 멀티프로세싱 모두 답은 얻을 수 있지만 무엇이 가장 빠를까요? 자세한 내용은 뒤에 소개하겠습니다. 우선 이해를 돕기위해 Application , Proecss, Thread 개념을 간단히 살펴보고 진행하겠습니다. Application (앱) 줄여서 앱(App) 이라고 부르며, 어떤 목적을 가지고 실행중인 프로그램 입니다. 하나 이상의 Proecss 로 구성됩니다. 아래 그림 예시에서 게임앱은 2개의 프로세스 가 서로 통신 ( IPC , 프로세스간 통신) 하며 실행되고 있고 엑셀앱은 단일 프로세스 로 실행중인 모습입니다. 앱은 1개이상의 프로세스로 구성될 수 있습니다. 그리고 프로세스는 1개의 메인쓰레드를 (실행흐름) 갖지만, 별도로 N개의 쓰레드를 생성해 구성할 수도 있습니다. [App, Process, Thread 관계] Process (프로세스) 실행중인 앱을 구성하는 단위(Task) 이며, 1개 이상의 프로세스가 모여 앱을 구성합니다. 하나의 앱은 꼭 1개의 프로세스가 아니라 다수의 프로세스로 구성될 수도 있다는 의미입니다. 예를 들어 게임이라면 아군이동, 적군이동, 코드가 프로