Python의 병렬 처리 기법 중 multi-thread와 multi-process를 비교해 볼 것이다.
또한 Python의 GIL이 병렬 처리에 어떠한 영향을 주는지 알아보자.
작업 수 = 4
N = 100,000,000
def py_heavy_work(n):
"""순수 Python 연산 작업"""
s = 0
for i in range(n):
s += (i * i) % 97
return s
| Python MT | Python MP | Rust MT(GIL o) | Rust MT(GIL x) | Rust MP |
|---|---|---|---|---|
| 20.610초 | 5.436초 | 0.270초 | 0.073초 | 0.149초 |
Python의 MT와 MP 비교 그리고 rust binding으로 GIL을 해제했을 때의 비교이다.
CPU bound 기준으로 GIL이 있는 MT는 쓰래기다.
그러나 GIL을 해제 가능하다면, 높은 퍼포먼스를 보여준다.(MP의 비해 오버해드가 낮음)
그리고 CPU bound를 신경 쓸 작업이면 Python을 안쓰면 된다.