코 로 틴 부터.

1811 단어 Python
정상 적 인 논리 에 따 르 면 함 수 는 등급 별로 호출 된 것 이다. 예 를 들 어 A 호출 B, B 에서 C 를 호출 했 고 C 집행 이 끝나 면 되 돌 아 왔 으 며 B 집행 이 끝나 면 되 돌 아 왔 다. 마지막 으로 A 집행 이 끝나 고 전 과정 은 스 택 에서 이 루어 졌 다.만약 에 저 에 게 A 와 B 두 함수 가 A 안의 몇 줄 코드 를 실행 할 수 있 고 B 몇 줄 코드 를 실행 할 수 있 으 며 한 줄 로 이 루어 질 수 있다 고 말씀 해 주 셨 다 면 저 는 이것 이 제 인 지 를 초과 했다 는 것 을 인정 할 수 밖 에 없습니다. 대학 에서 C 언어의 함수 호출 스 택 이 아직도 눈 에 선 합 니 다. 저 는 이렇게 기괴 한 호출 방식 이 있 을 줄 은 생각 하지 못 했 습 니 다.
    협 정 은 마이크로 스 레 드 라 고도 부 르 는데 1963 년 에 태 어 나 최근 몇 년 에 야 일부 언어 에서 광범 위 하 게 사용 되 기 시 작 했 기 때문에 대기만성 이 라 고 할 수 있다.
def A():
    print '1'
    print '2'
    print '3'

def B():
    print 'x'
    print 'y'
    print 'z'

위의 코드, 가능 한 실행 결과:
1
x
2
y
3
z

이 결 과 는 마치 두 개의 스 레 드 가 각각 실행 되 는 것 과 같 지만 단일 스 레 드 가 완성 되 었 다 면 상대 적 으로 여러 스 레 드 가 어떤 장점 이 있 습 니까?
1. 실행 효율, 호출 전환 은 프로그램 자체 에 의 해 제어 되 고 스 레 드 전환 비용 이 없습니다.
2. 단일 스 레 드 에서 완성 되 기 때문에 변수 에 대한 방문 은 다 중 스 레 드 중의 잠 금 체제 가 없고 집행 효율 도 향상 되 었 습 니 다. 예 를 들 어 2 개의 스 레 드 가 동시에 변 수 를 쓰 려 면 먼저 한 개 를 다 써 야 합 니 다. 잠 금 이 풀 려 난 후에 야 쓸 수 있 습 니 다. 협의 과정 이 라면 이런 비용 이 없습니다.
협 정 은 하나의 스 레 드 로 실행 되 기 때문에 다 핵 CPU 를 어떻게 이용 합 니까?가장 간단 한 방법 은 다 중 프로 세 스 + 협 정 으로 다 핵 을 충분히 이용 할 뿐만 아니 라 협 정의 효율 도 충분히 발휘 하여 높 은 성능 을 얻 을 수 있다.
그렇다면 python 에는 어떤 협 정 을 이용 한 것 이 있 을 까? 상상 할 수 없 는 yield 키 워드 는 바로 이 일 을 하 는 것 이다.yield 키워드 에 대해 이 글 은 아주 잘 썼 습 니 다. 저 는 관건 을 기록 하고 인상 을 깊 혔 습 니 다.
1. 상용 데이터 형식 dict, list 등 은 모두 Iterable 입 니 다. iter (iterable object) 를 사용 하면 iterable object 를 iterator object 즉 교체 기로 바 꿀 수 있 습 니 다.
2. generator 는 iterator 로 yield 를 포함 한 function 은 generator 대상 을 되 돌려 줍 니 다.
3. next (), send (). next () 는 generator 를 다음 yield 로 실행 하고 yield 표현 식 의 값 을 되 돌려 줍 니 다.send (value) 는 value 를 yield 표현 식 의 값 으로 하고 다음 yield 표현 식 으로 실행 합 니 다.

좋은 웹페이지 즐겨찾기