Python 병발:다 중 스 레 드 와 다 중 프로 세 스 에 대한 상세 한 설명

본 편의 개요
1.스 레 드 와 다 중 스 레 드
2.프로 세 스 와 다 중 프로 세 스
3.다 중 스 레 드 동시 다운로드
4.다 중 프로 세 스 병행 으로 디지털 연산 향상
병발 에 대하 여
컴퓨터 프로 그래 밍 분야 에서 동시 프로 그래 밍 은 흔히 볼 수 있 는 명사 와 기능 이다.사실은 이 이념 을 병행 하 는 것 은 처음에 철도 와 전보 의 초기 작업 에서 비롯 되 었 다.예 를 들 어 같은 철도 시스템 에서 여러 대의 기 차 를 어떻게 배치 하여 모든 기차 의 운행 이 충돌 하지 않도록 보장 합 니까?
그 후에 20 세기 60 년대 에 학계 에서 컴퓨터 의 병행 계산 에 대해 연 구 를 시 작 했 고 그 후에 운영 체제 가 병행 하 는 처리 임 무 를 수행 할 수 있 으 며 프로 그래 밍 언어 는 프로그램 에 병행 하 는 기능 을 실현 할 수 있 었 다.
스 레 드 와 다 중 스 레 드
무엇이 스 레 드 입 니까?
하나의 스 레 드 는 질서 있 는 명령 흐름(특정 임 무 를 수행 하 는 명령)이 라 고 볼 수 있 고 운영 체제 로 명령 흐름 을 조절 할 수 있다.
스 레 드 는 보통 프로 세 스 과정 에 있 습 니 다.프로그램 카운터,스 택,레지스터,식별 자 로 구성 되 어 있 습 니 다.이 스 레 드 는 프로세서 가 시간 을 분배 할 수 있 는 최소 실행 장치 이다.
스 레 드 사 이 는 메모 리 를 공유 하고 서로 통신 할 수 있 습 니 다.그러나 두 스 레 드 사이 에 메모 리 를 공유 하기 시작 하면 스 레 드 가 실행 되 는 순 서 를 보장 할 수 없 기 때문에 프로그램 이 잘못 되 거나 잘못된 결과 가 발생 할 수 있 습 니 다.이 문 제 는 우리 가 훗날 전문 적 으로 언급 할 것 이다.
다음 그림 은 여러 CPU 에 여러 스 레 드 가 존재 하 는 방식 을 보 여 줍 니 다.

스 레 드 형식
전형 적 인 운영 체제 에서 보통 두 가지 유형의 스 레 드 가 있 습 니 다.
1.사용자 급 스 레 드:우 리 는 스 레 드 를 만 들 고 실행 하 며 죽 일 수 있 습 니 다.
2.커 널 스 레 드:운영 체제 가 실행 하 는 저급 스 레 드;
Python 은 사용자 급 스 레 드 에서 작업 합 니 다.저희 가 소개 한 내용 도 주로 사용자 급 스 레 드 에서 실 행 됩 니 다.
다 중 스 레 드 란 무엇 입 니까?
현재 의 CPU 는 기본적으로 다 중 스 레 드 CPU 입 니 다.예 를 들 어 우 리 는 경 동 에서 Inter 의 쿨 i5 프로 세 서 를 찾 아서 제품 의 규격 을 보 세 요.

이 CPU 들 은 여러 개의 스 레 드 를 동시에 실행 하여 임 무 를 처리 할 수 있 습 니 다.사실은 본질 적 으로 이 CPU 들 은 여러 스 레 드 사이 에서 빠르게 전환 할 수 있 는 하나의 커 널 을 이용 하여 다 중 스 레 드 의 운행 을 완성 할 수 있 습 니 다.스 레 드 전환 속도 가 충분히 빠 르 기 때문에 우 리 는 느끼 지 못 합 니 다.그러나 실질 적 으로 그것들 은 동시에 운행 하 는 것 이 아니다.
이미지 의 이 해 를 위해 다 중 스 레 드,우 리 는 한 장면 을 회상 합 니 다.
대학 시절,기 말 에 어떤 과목 의 선생님 들 은 여러분 을 난처 하 게 하지 않 기 위해 시험 을 채점 시험 으로 치 렀 습 니 다.여러분 들 이 채점 시험 을 볼 때 문 제 를 푸 는 순 서 는 어 땠 는 지 모 르 겠 습 니 다.
단일 스 레 드 의 작업 모델 에서 우 리 는 선택 문제 부터 빈 문제 부터 간단 한 문제,그리고 분석 문제 까지 순서대로 쓴다.
아주 어 려 운 문제 에 부 딪 히 면 우 리 는 자 료 를 뒤 져 야 한다.물론 채점 시험 인 이상 어떤 문제 의 답 이 교과서 에 직접 나 올 수 없다.그러면 우 리 는 더 많은 시간 을 들 여 답 을 찾 아야 한다.시험 이 끝 날 때 까지 어떤 어 려 운 문제 가 책 을 뒤 집 는 시간 이 너무 많아 서 뒤의 간단 한 문제 도 할 필요 가 없다.응?시험 지 를 다 쓸 수 없 으 니,접수 정원 을 너 에 게 줄 것 이다.
그리고 다 중 스 레 드 의 작업 모델 에서 우 리 는 순서대로 썼 다.그러나 어 려 운 문제 에 부 딪 혔 을 때 우 리 는 책 에서 답 을 찾 았 다.만약 에 찾 지 못 하면 다음 문 제 를 풀 고 할 줄 아 는 문 제 를 잘 풀 고 쉬 운 문 제 를 만 든 다음 에 그 어 려 운 문제 로 돌아 가 책 속 의 거미줄 과 말 자국 에서 답 을 찾 았 다.
이 예 에서 우 리 는 단지 한 사람 이 완성 할 뿐이다.만약 에 시험 을 빨리 완성 하려 면 다른 학우 들 과 힘 을 합 쳐 합작 하고 분업 해 야 한다.
스 레 드 의 장점 을 살 펴 보 자.
1.다 중 스 레 드 는 I/O 차단 형 프로그램의 효율 을 효과적으로 향상 시 킬 수 있다.
2.프로 세 스에 비해 차지 하 는 시스템 자원 이 적다.
3.스 레 드 간 에 자원 을 공유 하고 통신 을 편리 하 게 할 수 있 습 니 다.
스 레 드 는 아직도 약간의 단점 이 있다.
1.Python 에는 전역 해석 기 잠 금(GIL)의 제한 이 있 습 니 다.
2.스 레 드 간 에 통신 을 할 수 있 지만 프로그램 결과 가 잘못 되 기 쉬 우 므 로 사용 할 때 조심해 야 합 니 다.
3.다 중 스 레 드 사이 에서 전환 하 는 계산 대가 가 높 으 면 프로그램의 전체적인 성능 이 떨어진다.
프로 세 스 와 다 중 프로 세 스
프로 세 스 는 본질 적 으로 스 레 드 와 매우 비슷 하 며,프로 세 스 는 스 레 드 가 완성 할 수 있 는 모든 일 을 거의 완성 할 수 있다.
위 에서 채점 한 시험의 예 에 따 르 면 룸메이트 와 한 무 리 를 이 루 면 우 리 는 네 개의 CPU(4 명)가 있 고 네 사람 이 각각 다른 답 을 쓰 고 찾 으 면 시험의 효율 이 많이 높아진다.
하나의 프로 세 스 에는 메 인 스 레 드 가 포함 되 어 있 고 여러 개의 하위 스 레 드 를 생 성 할 수 있 으 며 모든 스 레 드 는 자신의 레지스터 조합 스 택 을 포함 합 니 다.필요 하 다 면 다 중 스 레 드 로 구성 할 수 있다.
다음은 단일 프로 세 스 와 다 중 프로 세 스 의 예제 입 니 다.

프로 세 스 특성
프로 세 스 는 보통 다음 과 같은 내용 을 포함 합 니 다.
1.프로 세 스 ID,프로 세 스 그룹 ID,사용자 ID,그룹 ID
2.환경
3.작업 목록
4.프로그램 명령 어
5.레지스터
6.창고
7.파일 설명
8.프로 세 스 간 통신 도구
9.잠깐 만...
프로 세 스 는 다음 과 같은 장점 이 있 습 니 다.
1.다 핵 처리 장 치 를 잘 활용 한다.
2.CPU 밀집 형 작업 을 처리 할 때 다 중 스 레 드 보다 좋 습 니 다.
3.다 중 프로 세 스 를 통 해 전역 해석 기 잠 금(GIL)의 한 계 를 피 할 수 있 습 니 다.
4.붕 괴 된 프로 세 스 는 전체 프로그램의 붕 괴 를 초래 하지 않 습 니 다.
그리고 다음 과 같은 단점 도 있다.
1.프로 세 스 간 에 공유 자원 이 없습니다.
2.프로 세 스 는 더 많은 메모 리 를 소모 해 야 합 니 다.
다 중 프로 세 스
Python 에서 우 리 는 다 중 스 레 드 나 다 중 프로 세 스 방식 으로 코드 를 실행 하여 전통 적 인 단일 스 레 드 방식 의 성능 을 개선 할 수 있 습 니 다.
단일 핵 CPU 에 서 는 다 중 스 레 드 를 사용 하여 처리 능력 을 향상 시 킬 수 있 지만,현재 컴퓨터 CPU 에 서 는 다 중 핵 처리 장치 가 이미 보급 되 었 으 며,기계 의 자원 을 효과적으로 이용 하기 위해 서 는 다 중 프로 세 스 를 사용 하여 기계 의 가 치 를 발휘 할 필요 가 있다.
하나의 CPU 커 널 이 다른 CPU 에 작업 을 할당 합 니 다:

Python 프로 세 스 처리 모듈 multiprocessing 을 통 해 우 리 는 기계 의 모든 프로 세 서 를 효과적으로 이용 할 수 있 습 니 다.이것 은 우리 가 CPU 밀집 형 임 무 를 처리 할 때 더욱 높 은 성능 을 얻 는 데 도움 이 됩 니 다.
multiprocessing 모듈 을 사용 하여 우리 기계 의 CPU 핵심 수량 을 확인 합 니 다.

결 과 는 CPU 의 핵심 수 를 되 돌려 줍 니 다.
다 중 프로 세 스 는 우리 컴퓨터 의 이 용 률 을 높 일 수 있 을 뿐만 아니 라 전체 해석 기 잠 금 의 제한 도 피 할 수 있다.잠재 적 인 단점 은 다 중 프로 세 스 간 에 공유 와 통신 을 할 수 없다 는 것 이다(다른 수단 을 통 해 이 루어 질 수 있다).그러나 이 단점 은 다 중 프로 세 스 를 더욱 쉽게 사용 하고 붕 괴 를 피 할 수 있다 는 것 이다.
Python 의 한계 성
글 앞에서 우 리 는 Python 에 존재 하 는 전역 해석 기 잠 금 GIL 의 한계 에 대해 이야기 했다.그 GIL 은 도대체 무엇 입 니까?
GIL 은 본질 적 으로 서로 배척 하 는 자물쇠 로 여러 스 레 드 가 Python 코드 를 동시에 실행 하 는 것 을 방지 할 수 있다.코드 를 실행 하려 면 코드 를 실행 하기 전에 먼저 이 자 물 쇠 를 가 져 와 야 합 니 다.이렇게 하 는 장점 중 하 나 는 잠 겨 있 을 때 코드 를 동시에 실행 할 수 있 는 다른 프로 세 스 가 없어 서 어느 정도 스 레 드 간 의 충돌 을 피 할 수 있다 는 것 이다.

위의 이 그림 은 여러 스 레 드 가 어떻게 GIL 에 의 해 막 히 는 지 설명 한다.모든 스 레 드 는 GIL 을 가 져 올 때 까지 기 다 려 야 다음 실행 을 한 다음 GIL 을 풀 수 있 습 니 다.스 레 드 간 에 무 작위 로 순환 하 는 방식 을 사용 하기 때문에 어떤 스 레 드 가 먼저 GIL 을 받 을 지 제어 하고 보장 할 수 없습니다.
이런 디자인 은 반 인간 적 인 것 같 고 파 이 썬 을 비난 하 는 곳 이기 도 하 다.그러나 이 디자인 은 다 중 스 레 드 간 의 메모리 안전 을 보장 하 는 것 이 확실 하 다.
이제 우 리 는 스 레 드 와 프로 세 스,그리고 Python 의 제한 을 알 게 되 었 습 니 다.프로그램 에서 다 중 스 레 드 다 중 프로 세 스 를 어떻게 사용 하 는 지 알 아 보고 프로그램의 속 도 를 높 일 때 입 니 다.
동시 파일 다운로드
다 중 스 레 드 의 장점 을 보 여 주 는 예 는 다 중 스 레 드 를 이용 하여 여러 개의 그림 이나 파일 을 다운로드 하 는 것 이다.I/O 의 차단 성 으로 인해 다운로드 작업 은 다 중 스 레 드 를 가장 잘 활용 하 는 장면 일 수 있다.
4.567915.2017 년 모든 공휴일 을 제공 하 는 텍스트 파일 입 니 다.

우 리 는 10 번 방문 해서 10 번 의 텍스트 파일 을 얻 은 후에 로 컬 에 저장 합 니 다.
먼저 일반적인 기어 오 르 기 를 보 세 요.

우 리 는 모듈 urllib.request 를 도입 한 후에 파일 을 다운로드 하 는 함수 downloadImage()를 만 들 었 고 다운로드 함 수 를 20 번 옮 겨 다 니 는 함수 main()을 만 들 었 습 니 다.

4 초 남짓 걸리다.
다음은 다 중 스 레 드 를 사용 하 는 것 을 보 겠 습 니 다.

프로그램의 앞부분 은 대동소이 합 니 다.뒤쪽 에 threads 목록 을 만 든 다음 10 번 을 옮 겨 다 니 며 새로운 스 레 드 대상 을 만 들 고 threads 목록 에 추가 한 다음 이 스 레 드 를 시작 합 니 다.
마지막 으로,우 리 는 우리 의 threads 목록 을 옮 겨 다 니 며 우리 의 라인 을 호출 한 다음,join()방법 을 모든 라인 에 호출 합 니 다.이것 은 우리 가 파일 을 다운로드 하기 전에 남 은 코드 를 실행 하지 않도록 합 니 다.

코드 를 실행 하면 프로그램 이 거의 10 개의 다운로드 작업 을 동시에 시작 한 후에 그림 다운로드 가 끝 난 후에 인쇄 하 는 것 을 발견 할 수 있 습 니 다.
0.1 초 걸 려 효율 이 많이 향상 되 었 다.
그러나 주의해 야 할 것 은 네트워크 에서 파일 IO 를 진행 할 때 네트워크 상황 과 자신의 기계 의 영향 을 고려 해 야 하 며 서로 다른 네트워크 상황 에서 완성 하 는 효율 도 다르다 는 점 이다.
병렬 숫자 연산
I/O 밀집 형 작업 은 다 중 스 레 드 에 적합 하고 CPU 밀집 형 작업 은 다 중 프로 세 스 에 적합 합 니 다.
아래 의 예 에서 우 리 는 100 만 개의 20000 에서 100000000 사이 의 무 작위 수의 질 수 를 찾 아 낼 것 이다.
순서 연산:


18 초 걸 려 요.
다 중 프로 세 스 연산:


11 초 걸 려 요.
우 리 는 각각 100 만 번 순환 하고 다 중 프로 세 스 를 사용 하 는 프로 세 스 풀 을 100 만 번 순환 하 며 다 중 프로 세 스 모드 에서 속 도 를 7 초 가까이 올 렸 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기