파비의 매일매일 공부기록

파이썬 병렬 프로그래밍 - #4 threading과 concurrent.futures 모듈 사용 본문

Study/Python

파이썬 병렬 프로그래밍 - #4 threading과 concurrent.futures 모듈 사용

fabichoi 2021. 7. 22. 23:30

이번 장부터는 좀 더 실전에 대한 내용이 나온다.

지난 장에 서 병렬로 해결할 수 있는 몇 가지 예를 들었는데

이번장에서 python의 threading 모듈을 사용해 해결책을 구현한다.

 

1. 스레드 정의

- 스레드는 프로세스에서 다른 방식으로 실행됨.

- 하나의 프로세스에 여러 스레드가 존재할 수 있으며, 같은 프로세스에 속하는 스레드는 동일한 메모리를 공유한다. 따라서 개발자는 해당 메모리 영역을 제어하고 접근해야 한다.

 

2. 스레드 사용에 따른 장단점

장점

 - 동일 프로세스에서 스레드 통신 속도, 데이터 위치, 위치 공유가 빠름.

 - 프로세스 생성에 비해 스레드 생성 비용은 적음. (메인 프로세스의 context에서 유지하는 모든 정보를 복사할 필요가 없으므로)

 - 프로세서의 캐시 메모리를 통해 메모리 접근을 최적화하여 데이터 위치성을 최대한 활용 가능.

 

단점

 - 데이터 공유는 빠른 통신을 가능하게 하지만 개발자의 실력이 없는 경우 해결이 어려운 오류를 만들 수 있음.

 

3. 스레드의 다른 종류 이해

커널 스레드 : 운영체제가 생성하고 관리하는 스레드. 운영체제가 제어.

 - 장점 : 한 커널 스레드는 한 프로세스를 참조. 다른 CPU에서 실행할 수 있음.

 - 단점 : 생성과 동기화 비용이 비쌈. 구현이 플랫폼에 종속.

사용자 스레드 : 패키지 개발자가 스레드의 상태를 제어.

 - 장점 : 생성과 동기화 비용이 쌈. 플랫폼에 종속되지 않음.

 - 단점 : 프로세스 내부의 모든 사용자 스레드는 오직 한 커널 스레드와 관련 있음. 사용자 스레드 하나가 블록 되면 모든 다른 사용자 스레드도 실행 불가. 다른 CPU에서 실행 불가.

 

4. 스레드 상태 정의

생성 : 메인 프로세스가 스레드 생성. 생성 후 실행 준비가 된 스레드 줄에 보냄.

실행 : CPU 사용.

준비 : 실행 준비가 된 스레드 줄에 있으며, 실행 의무가 있음.

블록 : I/O 연산을 기다리기 위해 블록 됨. CPU 활용하지 않음

종료 : 실행에 사용했던 자원 해제 후 스레드 수명 끝.

 

5. threading과 _thread 모듈 중 하나 선택

threading은 _thread에 비해 친화적인 인터페이스 지원. 저수준의 접근이 필요하면 _thread 사용을 추천.

 

다음 6, 7은 3장에 나왔던 피보나치수열 구하기 및 웹 스크래핑(크롤링)에 대한 예제를 소개한다.

해당 내용은 생략한다. (책을 참조)

 

 

 

반응형
Comments