[c] 멀티스레딩과 멀티프로세싱
본 문서에서는 멀티스레딩과 멀티프로세싱의 차이를 살펴보고, 파이썬에서 어떻게 활용되는지 비교해 보겠습니다.
멀티스레딩
멀티스레딩은 한 프로세스 내에서 여러 스레드를 생성하여 동시에 여러 작업을 수행할 수 있도록 하는 기술입니다. 이때, 각 스레드는 같은 프로세스 내의 자원을 공유합니다. 멀티스레딩을 통해 I/O 바운드 작업의 성능을 향상시키거나, 동시에 여러 작업을 처리하는 데 유용합니다.
파이썬에서의 멀티스레딩
import threading
def task():
print("This is a task")
thread1 = threading.Thread(target=task)
thread2 = threading.Thread(target=task)
thread1.start()
thread2.start()
멀티프로세싱
멀티프로세싱은 여러 개의 프로세스를 생성하여 동시에 여러 작업을 수행할 수 있도록 하는 기술입니다. 각 프로세스는 독립적인 메모리 공간을 가지므로, 프로세스 간에 데이터를 주고받는 데에는 별도의 메커니즘이 필요합니다. 멀티프로세싱을 통해 CPU 바운드 작업의 성능을 향상시키거나, 병렬적으로 여러 작업을 처리하는 데 유용합니다.
파이썬에서의 멀티프로세싱
from multiprocessing import Process
def task():
print("This is a task")
process1 = Process(target=task)
process2 = Process(target=task)
process1.start()
process2.start()
파이썬에서의 비교
파이썬은 GIL(Global Interpreter Lock)이라는 메커니즘으로 인해 멀티스레딩의 성능이 제약을 받을 수 있습니다. 이에 반해 멀티프로세싱은 각 프로세스가 독립적인 메모리 공간을 가지므로 GIL의 영향을 받지 않고 병렬성을 확보할 수 있습니다.
따라서, CPU 바운드 작업에는 멀티프로세싱을 사용하여 성능을 향상시키고, I/O 바운드 작업에는 멀티스레딩을 사용하여 동시에 여러 작업을 처리하는 것이 좋습니다.
이처럼 파이썬에서의 멀티스레딩과 멀티프로세싱은 각각의 장단점을 고려하여 적절히 활용해야 합니다.
참고 문헌:
- “파이썬 병렬 프로그래밍 – 2. 멀티스레드와 멀티프로세스”, https://offbyone.tistory.com/289
- “파이썬으로 배우는 알고리즘 트레이딩”, 김연희, 한빛미디어, 2018