[파이썬] 병렬 처리와 동시성 프로그래밍의 차이점

병렬 처리(Parallel Processing)와 동시성 프로그래밍(Concurrent Programming)은 겉으로는 비슷해 보이지만, 실제로는 다른 개념들입니다. 이 글에서는 Python을 기반으로 병렬 처리와 동시성 프로그래밍의 차이점과 각각의 장단점에 대해 알아보겠습니다.

병렬 처리(Parallel Processing)

병렬 처리는 여러 개의 작업을 동시에 실행하여 처리 속도를 향상시키는 기술입니다. 여러 개의 프로세서 또는 코어가 동시에 실행되어 작업을 분산 처리하는 방식을 의미합니다. 이러한 병렬 처리를 위해 Python에서는 multiprocessing 모듈을 사용할 수 있습니다.

import multiprocessing

def process_func(num):
    result = num ** 2
    print(f"Square of {num} is {result}")

if __name__ == "__main__":
    process_list = [2, 4, 6, 8, 10]
    
    with multiprocessing.Pool() as pool:
        pool.map(process_func, process_list)

위의 예시 코드는 multiprocessing 모듈을 사용하여 주어진 숫자들의 제곱을 병렬로 계산하는 간단한 예시입니다. Pool 객체를 사용하여 작업을 병렬로 처리하고, map 함수를 사용하여 작업 함수를 각각의 숫자에 대해 호출합니다.

동시성 프로그래밍(Concurrent Programming)

동시성 프로그래밍은 여러 작업이 동시에 실행될 수 있도록 하는 프로그래밍 기법입니다. 하나의 프로세서 또는 코어에서 여러 작업이 번갈아가며 실행되는 방식을 의미합니다. 이러한 동시성 프로그래밍을 위해 Python에서는 threading 모듈을 사용할 수 있습니다.

import threading

def thread_func(num):
    result = num ** 2
    print(f"Square of {num} is {result}")

if __name__ == "__main__":
    thread_list = [2, 4, 6, 8, 10]
    
    thread_pool = []
    for num in thread_list:
        thread = threading.Thread(target=thread_func, args=(num,))
        thread_pool.append(thread)
        thread.start()
    
    for thread in thread_pool:
        thread.join()

위의 예시 코드는 threading 모듈을 사용하여 주어진 숫자들의 제곱을 동시에 계산하는 예시입니다. 각각의 숫자에 대해 쓰레드를 생성하고, 생성한 쓰레드들을 실행시킵니다. 마지막으로 모든 쓰레드의 실행이 완료될 때까지 기다립니다.

병렬 처리와 동시성 프로그래밍의 차이점

정리

병렬 처리와 동시성 프로그래밍은 비슷한 개념들이지만, 다른 방식으로 작업들을 실행시키고 제어합니다. 병렬 처리는 대규모의 병렬 작업 처리에 효과적이며, 동시성 프로그래밍은 작은 규모의 작업들을 효율적으로 실행시킬 수 있습니다. 적절한 상황에 맞게 병렬 처리 또는 동시성 프로그래밍을 선택하여 프로그램의 성능을 최적화할 수 있습니다.