티스토리 뷰
https://docs.python.org/ko/3/library/threading.html
이번 포스팅은 Thread에 대한 내용입니다.
Thread란 Python뿐만 아니라, 대부분의 모든 언어에서 지원하는
병렬처리를 위한 프로그래밍 입니다.
아래 간단한 이미지를 보시죠
일반적으로, Main Flow가 흘러가면서 순차적으로 작업을 진행합니다.
이때, 작업1과 작업2, 작업3이 독립적이면, 아래와같은것이 가능합니다.
하지만, 잘 생각해봅시다. 작업을 할 수 있는 Core가 1개라면
어차피 작업을 직렬작업이나 병렬작업이나 어차피 걸리는 시간을 동일합니다.
(어차피 CPU가 1개면 시간을 나눠서 진행합니다)
이때 중요한점.
Python 이외에 C/C++, Java 등 다른 언어에서는 Posix Thread(국제표준 Thread 오픈소스)를 기반으로 하기 때문에
CPU가 늘어나면, CPU 가상Core에 맞게 작업을 배분합니다.
하지만, Python같은 경우는, GIL(Global Interpreter Lock)이라는 정책이 있어서, Thread를 사용할 경우 Input/Output 작은 동시에 병렬처리가 가능하지만, CPU 연산 작업은 동시에 1개로 제한됩니다.
https://wiki.python.org/moin/GlobalInterpreterLock
아래는 n번의 더하기 작업을 Threadㄹ 나눠서 or 직렬작업으로 진행한 코드 및 결과입니다.
보시면 알겠지만, Thread로 나뉘어 실행한것과 직렬처리 결과는 사실상 큰 차이가 없는것을 알 수 있습니다.
import threading
import time
def foo(n):
for k in range(4):
temp = 0
for i in range(n):
temp += 1
print("work_end")
print(temp)
def foo_thread(n):
temp = 0
for i in range(n):
temp += 1
output_str = str(threading.get_native_id())+"work end"
print(output_str)
start = time.time()
th = [threading.Thread(target = foo_thread, args = (10000000,)) for i in range(4)]
for i in th:
i.start()
for i in th:
i.join()
print("time :", time.time() - start)
start = time.time()
foo(10000000)
print("time :", time.time() - start)
out:
#4개의 Thread를 만들어서 실행한 결과
1668work end
8372work end
3924work end
7296work end
time : 3.5046191215515137
#직렬 작업으로 진행한 결과
work_end
10000000
time : 3.237943649291992
그러면 I/O 작업 이외에 작업의 속도가 빨리지지 않는데, 어떠한 부분에서 활용이 가능할까요?
다음 포스팅에서 Thread를 사용한 예시에 대해서 다룹니다.
https://teus-kiwiee.tistory.com/71?category=922602
'Python 잡지식' 카테고리의 다른 글
Python의 매개변수 전달방식 (0) | 2021.03.13 |
---|---|
Event Listener의 정체 (0) | 2021.03.10 |
Pandas Boolean Indexing을 사용해 특정 Col의 Value 바꾸기 (0) | 2021.02.26 |
여러개의 List를 기준으로 정렬하기 (0) | 2021.02.23 |
특정 List를 기준으로 Data를 정렬하기 (0) | 2021.02.21 |
- Total
- Today
- Yesterday
- 프로그래머스
- 알고리즘
- GDC
- 사칙연산
- AVX
- prime number
- heap
- Python
- 이분탐색
- SIMD
- Greedy알고리즘
- C++
- Search알고리즘
- 컴퓨터그래픽스
- git
- 동적계획법
- 자료구조
- 완전탐색 알고리즘
- 코딩테스트
- hash
- 병렬처리
- stack
- Sort알고리즘
- 분할정복
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |