python 은 병발 방법 에 대한 상세 한 설명 을 어떻게 지원 합 니까?

2240 단어 python병발 하 다
GIL(Global Interpreter Lock)의 존재 로 인해 같은 시각 에 Python 프로 세 스 는 CPU 의 핵심,즉 해당 운영 체제 의 하나 만 사용 할 수 있 습 니 다.
커 널 스 레 드,Python 웹 프로그램 에 대한 요청 이 있 으 면 오래 걸 리 는 계산 작업(점용)입 니 다.이 프로그램 은 첫 번 째 요청 을 받 은 후에
다른 부탁 을 처리 할 수 있 을 까?웹 프로그램 이 요청 을 받 아들 이면 while True:

def handle_request(request):
 while True:
  pass
코드 에서 이해 하면 Python 은 하나의 실제 실행 스 레 드 만 있 고 코드 가while True에 가면 유일한 cpu 핵심 을 차지 합 니 다.처리 할 기회 가 있 습 니 다.
다른 미 션 이 요?
두 스 레 드 를 모두 while True 로 시작 하여 두 요청 을 모 의 할 수 있 는 지 관찰 합 니 다.

import time, threading

def f1(name):
 while True:
  print(name)
  time.sleep(1)

threading.Thread(target=f1, args=('f1', )).start()
threading.Thread(target=f1, args=('f2', )).start()
출력 결과:
f1
f2
f2f1
f2
f1
...
실제로 Django(Python Web 프레임 워 크)테스트 를 사용 합 니 다.요청 이 실행 되 더 라 도while True다른 요청 을 처리 할 수 있 습 니 다.
왜 두 개while True가 모두 실 행 될 수 있 는 지 설명 하 자.
아니면 GIL 이라는 자물쇠 로 첫 번 째while True의 스 레 드 가 이 자 물 쇠 를 가 져 와 야 실행 할 수 있 습 니 다.그리고 자 물 쇠 를 실행print(name)한 다음 에 자 물 쇠 를 풀 었 습 니 다.
그것 은 중단 되 었 고 이 어 두 번 째while True스 레 드 가 GIL 을 받 은 후에 실행 되 기 시 작 했 으 며 GIL 교 체 를 둘러싸 고 실행 되면 서 Python 의 다 중 스 레 드 가 실현 되 었 다.
요약:while TrueCPU 자원 을 계속 가지 고 있 을 수 없습니다.이것 도 실행 하고 잠시 쉬 는 것 입 니 다.이것 은 다른 프로 세 스 에 기 회 를 주 었 습 니 다.이 안에 두 가지 관건 이 있 습 니 다.
  • 이 자 물 쇠 를 어떻게 빼 앗 는 지
  • 자 물 쇠 를 어떻게 풀 어 요
  • 자 물 쇠 를 빼 앗 아 줄 을 서다.lock 에 대기 열 을 설정 하고 실행 하고 싶 은 것 은 이 대기 열 에 들 어 갑 니 다.
    잠 금 해제 와 유사 한 프로 세 스 스케줄 링:
  • 시간 대별 영화(똑 같은 시간 집행)
  • 명령 실행 계수(같은 명령 실행 횟수)
  • IO 조작 에 부 딪 히 기(수 동 대기)
  • 자 진 대기(wait/join/sleep)
  • IO 작업 에 부 딪 히 면 IO 장치 가 계산 이 끝 날 때 까지 기 다 려 야 스 레 드 를 계속 실행 할 수 있 습 니 다.이 시간 동안 CPU 자원 을 차지 하지 않 고 먼저 자 물 쇠 를 풀 었 습 니 다.
    주동 적 으로 기다 리 는 전형 적 인 것 은 sleep 이다.주동 적 으로 자 물 쇠 를 포기 하고 일정한 시기 에 다시 실행 하 는 것 이다.
    이상 의 분석 은 Python 이 병발 을 지원 하지만 다 중 핵 프로세서 의 장점 을 이용 할 수 없 기 때문에 대량의 계산 집약 형 응용
    Python 을 사용 하기에 적합 하지 않 습 니 다.
    python 이 병발 을 어떻게 지원 하 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python 지원 병발 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기