[python] 파이썬 스레딩과 프로세스의 차이점

파이썬에서 스레딩프로세스병렬 프로그래밍을 구현하는 데 사용됩니다. 그러나 이 두 가지 접근 방식은 엄격하게 구별됩니다. 이번 글에서는 스레딩과 프로세스가 각각 무엇이며, 어떻게 다른지에 대해 살펴볼 것입니다.

스레딩(Thread)

스레딩은 프로세스 내에서 실행되는 여러 작업 단위입니다. 파이썬은 threading 라이브러리를 통해 멀티스레딩을 지원합니다. 스레드는 같은 주소 공간을 공유하기 때문에 데이터를 공유하는 데 유리합니다. 그러나 GIL(Global Interpreter Lock) 의 영향으로 CPU-바운드 작업에서는 성능 향상을 기대하기 어렵습니다.

import threading

def worker():
    # 작업 수행

t1 = threading.Thread(target=worker)
t2 = threading.Thread(target=worker)

t1.start()
t2.start()

프로세스(Process)

프로세스독립된 메모리 공간에서 실행되는 프로그램의 인스턴스입니다. 파이썬은 multiprocessing 라이브러리를 통해 멀티프로세싱을 지원합니다. 각 프로세스는 독립적인 주소 공간을 가지므로 메모리 상에서 분리되어 있는 장점이 있습니다.

from multiprocessing import Process

def worker():
    # 작업 수행

p1 = Process(target=worker)
p2 = Process(target=worker)

p1.start()
p2.start()

결론

스레딩과 프로세스는 각각의 장단점을 가지고 있으며, 어떤 상황에 어떻게 사용할지에 대해 신중한 판단이 필요합니다. 스레딩은 I/O-바운드 작업과 데이터를 공유하는 작업에 유리하며, 프로세스는 CPU-바운드 작업에 유리합니다.

이러한 차이를 이해하고 적절히 활용함으로써 파이썬으로 효율적인 병렬 프로그래밍을 구현할 수 있습니다.


참고 문헌: