파이썬으로 숫자 엄청 많이 더하는 계산 작업을 좀 빠르게 돌려보려고 스레드를 써봤어요. 코어가 여러 개니까 스레드 4개로 나눠서 돌리면 대충 4배까진 아니어도 2~3배는 빨라질 줄 알았거든요.
대충 이런 식으로 했어요.
import threading
def crunch():
total = 0
for i in range(50_000_000):
total += i
ths = [threading.Thread(target=crunch) for _ in range(4)]
for t in ths:
t.start()
for t in ths:
t.join()
근데 시간을 재보니까 스레드 4개로 돌린 거나 그냥 한 번에 다 돌린 거나 걸린 시간이 거의 똑같아요. 오히려 스레드 버전이 살짝 더 느린 것 같기도 하고요. 작업 관리자 보니까 CPU도 한 코어만 바쁘게 돌아가더라고요.
검색해보니까 GIL이라는 게 있어서 그렇다는데, 이게 정확히 뭔가요? 스레드를 분명 여러 개 만들었는데 왜 한 번에 하나씩만 도는 것처럼 되는 건지 모르겠어요. 그럼 파이썬에서 스레드는 아예 쓸모가 없는 건가요? CPU 많이 쓰는 계산은 그냥 어떻게 나눠서 돌려야 실제로 빨라지나요? 방향만 좀 잡아주시면 감사하겠습니다.