멀티프로세싱(MultiProcessing)
- 여러 프로세스를 사용하여 동시에 여러 작업을 수행하는 방법
- 각 프로세스는 독립된 메모리 공간을 가지며 서로 다른 CPU 코어에서 병렬로 실행될 수 있음
- 멀티 프로세싱은 CPU 집약적인 작업을 병렬로 처리하는 데 효과적
특징
- 독립된 메모리 공간 : 각 프로세스는 독립된 메모리 공간을 사용하므로 하나의 프로세스가 크래시되더라도 다른 프로세스에 영향을 미치지 않음
- 병렬 실행 : 멀티프로세싱은 여러 CPU 코어를 활용하여 병렬로 작업을 실행
- 이는 다중 코어 시스템에서 성능을 극대화할 수 있음
- 안정성 : 메모리 공유가 없기 때문에 스레드 간의 데이터 충돌 문제(경쟁 상태)를 피할 수 있음
멀티스레딩(MultiThreading)
- 하나의 프로세스 내에서 여러 스레드를 생성하여 동시에 여러 작업을 수행하는 방법
- 모든 스레드는 같은 메모리 공간을 공유
- 멀티스레딩은 I/O 작업이나 가벼운 병렬 작업을 효율적으로 처리하는 데 유리
특징
- 공유 메모리 공간: 모든 스레드는 동일한 메모리 공간을 공유하므로, 데이터 공유와 통신이 더 빠르고 효율적
- 경량화: 스레드는 프로세스보다 생성 및 종료 비용이 적음
- 동시성: 멀티스레딩은 실제 병렬 실행보다는 동시성을 제공하여, I/O 작업 대기 시간 동안 다른 작업을 수행할 수 있게 함
실습
import os
from multiprocessing import Process
import requests
def f(name):
x = requests.get('https://w3schools.com/python/demopage.htm')
print('pid of parent:', os.getppid())
print('pid of %s : %d' %(name, os.getpid()))
print(x.text)
if __name__ == '__main__':
print('pid of main:', os.getpid())
p1 = Process(target=f, args=("프로세스 1",))
p2 = Process(target=f, args=("프로세스 2",))
p1.start(); p1.join()
p2.start(); p2.join()