일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Writing
- English
- 개발자
- Problem Solving
- 운동
- 월간
- 링피트
- FIT XR
- 읽기
- realclass
- 10분
- 영어원서읽기
- 괜찮음
- 30분
- 프로젝트
- 스탭퍼
- Daily Challenge
- 미드시청
- leetcode
- 사이드
- 뭐든
- 만화도
- 화상영어
- 영어공부
- 파비최
- 매일
- 쓰릴오브파이트
- 리얼 클래스
- 3줄정리
- 잡생각
- Today
- Total
파비의 매일매일 공부기록
파이썬 병렬 프로그래밍 - #4 threading과 concurrent.futures 모듈 사용 본문
이번 장부터는 좀 더 실전에 대한 내용이 나온다.
지난 장에 서 병렬로 해결할 수 있는 몇 가지 예를 들었는데
이번장에서 python의 threading 모듈을 사용해 해결책을 구현한다.
1. 스레드 정의
- 스레드는 프로세스에서 다른 방식으로 실행됨.
- 하나의 프로세스에 여러 스레드가 존재할 수 있으며, 같은 프로세스에 속하는 스레드는 동일한 메모리를 공유한다. 따라서 개발자는 해당 메모리 영역을 제어하고 접근해야 한다.
2. 스레드 사용에 따른 장단점
장점
- 동일 프로세스에서 스레드 통신 속도, 데이터 위치, 위치 공유가 빠름.
- 프로세스 생성에 비해 스레드 생성 비용은 적음. (메인 프로세스의 context에서 유지하는 모든 정보를 복사할 필요가 없으므로)
- 프로세서의 캐시 메모리를 통해 메모리 접근을 최적화하여 데이터 위치성을 최대한 활용 가능.
단점
- 데이터 공유는 빠른 통신을 가능하게 하지만 개발자의 실력이 없는 경우 해결이 어려운 오류를 만들 수 있음.
3. 스레드의 다른 종류 이해
커널 스레드 : 운영체제가 생성하고 관리하는 스레드. 운영체제가 제어.
- 장점 : 한 커널 스레드는 한 프로세스를 참조. 다른 CPU에서 실행할 수 있음.
- 단점 : 생성과 동기화 비용이 비쌈. 구현이 플랫폼에 종속.
사용자 스레드 : 패키지 개발자가 스레드의 상태를 제어.
- 장점 : 생성과 동기화 비용이 쌈. 플랫폼에 종속되지 않음.
- 단점 : 프로세스 내부의 모든 사용자 스레드는 오직 한 커널 스레드와 관련 있음. 사용자 스레드 하나가 블록 되면 모든 다른 사용자 스레드도 실행 불가. 다른 CPU에서 실행 불가.
4. 스레드 상태 정의
생성 : 메인 프로세스가 스레드 생성. 생성 후 실행 준비가 된 스레드 줄에 보냄.
실행 : CPU 사용.
준비 : 실행 준비가 된 스레드 줄에 있으며, 실행 의무가 있음.
블록 : I/O 연산을 기다리기 위해 블록 됨. CPU 활용하지 않음
종료 : 실행에 사용했던 자원 해제 후 스레드 수명 끝.
5. threading과 _thread 모듈 중 하나 선택
threading은 _thread에 비해 친화적인 인터페이스 지원. 저수준의 접근이 필요하면 _thread 사용을 추천.
다음 6, 7은 3장에 나왔던 피보나치수열 구하기 및 웹 스크래핑(크롤링)에 대한 예제를 소개한다.
해당 내용은 생략한다. (책을 참조)
'Study > Python' 카테고리의 다른 글
파이썬 병렬 프로그래밍 - #6 패러렐 파이썬 활용 (0) | 2021.07.24 |
---|---|
파이썬 병렬 프로그래밍 - #5 multiprocessing과 ProcessPoolExecutor 모듈 사용 (0) | 2021.07.23 |
파이썬 병렬 프로그래밍 - #3 병렬화 문제 확인 (0) | 2021.07.21 |
파이썬 병렬 프로그래밍 - #2 병렬 알고리즘 설계 (0) | 2021.07.20 |
파이썬 병렬 프로그래밍 - #1 병렬, 동시성, 분산 프로그래밍 문맥 설명 (0) | 2021.07.19 |