코드를 병렬적으로 처리하기 위한 방법으로는 크게
멀티스레딩(Multi-threading)과
멀티프로세싱(Multi-processing)이 있다.
멀티스레딩은 스레드라는 실행 흐름을 말한다. 독립적으로 실행되는 2개의 코드를 각각 서로 다른 스레드에 나누어 담게 되면, 프로그램이 실행될 때 두개 스레드가 동기에 실행된다.
이렇듯 멀티스레딩이 단일 프로세스 안에 여러개 스래드가 동시작업 되는 방식이었다면,
멀티프로세싱은 프로세스 자체가 여러개인 시스템인 것이다. 따라서 멀티프로세싱은 CPU가 추가되어 처리되는 방식이다.
파이썬의 경우는 GIL(Global Interpreter Lock)에 의해 멀티스레딩이 무의미하다. 정확히는 cpu동작에서 무의미하다. cpu동작에서 스레드를 여러개 생성하더라도 단일 스레드일 때와 비슷한 작업시간이 소모된다. 하지만 I/O작업을 실행하는 경우에는 멀티스레딩이 가능하다. 따라서 I/O작업이 대부분인 경우에만 멀티스레딩으로 유의미한 성능적 효과를 볼 수 있다.
그렇기 때문에 파이썬에서 병렬적인 실행을 구현하려면 멀티스레딩보다는 멀티프로세싱을 사용해야한다. 멀티프로세싱은 pool이나 process를 import하여 사용하거나 ray등의 멀티프로세싱 라이브러리를 사용하여 구현할 수 있다.