파이썬 기준 (XII) 02 동시 프로그래밍

코 루틴

또한 마이크로 스레드라는 코 루틴은 파쇄. 영어 코 루틴.

프로세스와 스레드 선제을 실행

코 루틴은 공동 (비 선점), 순서대로 프로그램을 실행 우리가 가진 것을 완벽하게 제어 할 수 있습니다

 

코 루틴 자연에 오직 하나 개의 스레드, 주로 IO 작업을 해결하기 위해

 

장점 :

(1) 장점 : 고효율 코 루틴. 스위치가 아니기 때문에 루틴 스레드 스위칭하지만, 프로그램 자체, 따라서 스레드 스위치 오버 헤드없이, 그리고 비 멀티 스레드 스레드보다 수가 더 명백한 성능상의 이점을 코 루틴.

2 장점 : 멀티 스레드 잠금 메커니즘을 필요로하지 않는, 하나 개의 스레드 만 있기 때문에,이 단지 판사의 상태와 같은 공유 자원의 제어는 코 루틴에 고정되지 않고, 변수를 쓰는 동안 충돌이 없기 때문에 효율이 멀티 스레딩보다 높은 많은.

코 루틴이 실행 스레드이기 때문에, 어떻게 멀티 코어 CPU 그것을 활용하는? 가장 쉬운 방법은 모두 멀티 코어, 높은 효율을 최대한 활용하고, 협회의 프로세스에 높은 성능의 가용성을 발휘하다, 멀티 프로세스 + 코 루틴입니다.

수율의 간단한 구현

1 개 가져 오기 시간 
 이 수입 
 3 
 4 데프 소비자 (이름) : 
 5 인쇄 ( "---> 바 오즈를 먹을 준비가 ..." )  6하면서 진정한 :  7 new_baozi = 수율  8 인쇄 ( "[% s이 (가)] 바 오즈를 먹고있다 % S "% (이름, new_baozi)) # 9 time.sleep (1) 10 11 데프 제조자 () 12 13 R = 콘 .__ next__ () (14) R = CON2 .__ next__ () N = 15 0 16 1 동안 : 17 time.sleep (1 ) 18 인쇄 (% (N, N + 1 "\ 033 32 1m [제조자] 033 [0m는 바 오즈 %의 s 및 % S 만드는 \" (19))) (N) con.send 20 con2.send (N + 1 ) (21) (22) N = 2 + 23 24 25 경우 __name__ == '__main__' 26 = 소비자 콘 ( "C1") = 27 CON2 소비자 ( "C2" ) 28 p = 제조자 ()

Greenlet

C로 구현 greenlet하면 수율에 비해 코 루틴 모듈 선언하는 발생기를 필요로하지 않고 사용자가 자유롭게 임의의 기능을 전환 할 수 파이썬,이 기능을 제공

greenlet 수입 1 greenlet 
 2   
 3   
 4 데프 TEST1 () : 
 5 인쇄 (12 ) 
 6  gr2.switch ()  (7) 토너 (34 )  8 gr2.switch () 9 10 11 데프 TEST2 () (56 12 인쇄 ) 13 GR1 .switch () 14 토너 (78 ) 15 16 17 GR1 = greenlet (TEST1) = 18 GR2 greenlet (TEST2) 19 gr1.switch ()

행상

코 루틴 : 자동으로 필요에 CPU의 동작을 전환하기위한 IO 작업을 충족

1 임포트 gevent 
 2 
 3 반입 요청 시간 
 4 
 5 
 6 시작 = 로 time.time () 
 7 
 8 데프 F (URL) :  9 인쇄 ( "GET % S '%의 URL)  10 RESP = requests.get (URL) 11 데이터 = 12 인쇄 resp.text ( '. %의 D %가 (S)으로부터받은 바이트'%을 (LEN (데이터), URL)) 13 14 gevent.joinall ([15 16 gevent.spawn (F 'HTTPS : //www.python .ORG / ' ), 17 gevent.spawn (F'https://www.yahoo.com/ ' ), 18 gevent.spawn (F'https://www.baidu.com/ ' ), 19 gevent .spawn (F 'https://www.sina.com.cn/' ), 20 (21)]) 22 23 # f를 ( 'https://www.python.org/') # 25 # 24의 F ( 'https://www.yahoo.com/') # 27 # 26의 F ( "HTTPS : // baidu.com/ ') 28 # 29 # f를 ('https://www.sina.com.cn/ ') (30) (31) 인쇄 ( "비용 시간 :"로 time.time () - 시작)

파이썬에서 컨텍스트 관리자 ( contextlib 모듈 )>

IO 모델

이벤트 기반 모델

코 루틴 : 다음 때 다시 전환 충족 IO 작업을 전환 할 것인가? 어떻게 IO 작업이 끝난 결정?

 

 선형 프로그래밍 모드

시작 ---> 블록 (A) ---> B 블록 ---> 코드 블록 C ---> 코드 블록 D ---> ......---> 종료

각 코드 블록이 여러 가지 코드에서 수행되지만, 프로그래머는 코드 블록 (A)를 알고, B, C, D ... 실행 순서, 데이터의 흐름을 변경하는 유일한 방법. 조건문에 따라 결정하는 다른 입력 데이터는, 아마도 ---> C ---> E ...---> 단부를 처리한다. 각 프로그램은 서로 다른 실행 순서가있을 수 있지만 제어 흐름은 입력 데이터와 당신이 쓰는 프로그램에 의해 결정된다. 당신이 (입력 데이터와 프로그램 자체를 포함하여) 프로그램의 현재 상태를 알고 있다면, 당신은 심지어 운영 절차가 끝날 때까지 다음을 알고있다.

 

이벤트 기반 모델

시작 ---> 초기화 ---> 대기

 그리고 기존의 프로그래밍 모델 이상은 무엇을 기다리고, 그 대기에, 시작 후 이벤트 중심의 절차는 다르다? 대기 이벤트를 트리거합니다. 거기에 기존의 프로그래밍, 데이터를 입력해야합니다) 블록 D에서, 당신은 입력을 (정의, "대기". 그러나 같은 입력 ()으로, 다음과 같은 다른 전통적인 프로그래밍 "대기"로 대기하면, 프로그래머가 알거나 입력 뭔가에 사용자를 강제로, 아마 번호, 아마도 파일 이름, 사용자 입력 오류의 경우, 당신은 또한 그를 생각 나게해야하고, 다시 입력하는 그에게 물었다. 이벤트 중심의 프로그램을 기다리는 완전히 모르고, 또는 입력을 사용자에게 강요하지 않습니다. 이벤트가 발생할 때마다, 다음 프로그램은 적절한 "응답을."만들 것 이러한 이벤트는 다음과 같습니다 정보 입력, 마우스, 탭 키보드뿐만 아니라 주요 트리거 내부 시스템 타이머를.

 

당신이 사용자의 마우스 클릭 이벤트를 감지하는 스레드를 생성하는 경우, 단점 :

  1. CPU 리소스가, 마우스 클릭 빈도가 매우 작은 수 있지만 여전히 스레드 루프 감지를 스캔했을 것이다, 그것은 낭비 CPU 리소스를 많이 일으킬 것이다 스캔 - 클릭 인터페이스를 차단하고 있는지?

  2. 이 차단 된 경우, 다음은 우리가 단지 마우스 클릭을 검사 할 경우, 이러한 문제가 될뿐만 아니라 스캔 마우스를 차단하려면 키보드를 스캔 가지 않을 수 있습니다 때문에 키보드, 우울 검사합니다;

  3. 검사주기가 차례로 응답 시간이 문제가 발생할 수 있습니다 매우 큰 장비를 필요로하는 경우; 

    따라서,이 방법은 매우 나쁘다.

따라서, 이벤트 구동 모델의 사용은이 문제를 일반적인 생각을 해결하기 위해 :

  1. 이벤트 (메시지) 큐가있다;

  2. 마우스를 누르면, 큐는 클릭 이벤트 (메시지)를 추가합니다;

  3. 주기가 연속적 이벤트에 따라 이벤트 큐로부터 제거 등의 onclick ()에 onKeyDown () 등의 다양한 기능을 호출;

  4. 각각이 자신의 메시지 핸들러를 갖도록 이벤트 (메시지)는, 일반적으로 각각 기억 각 처리 기능 포인터; 

 

 사건 기반 프로그래밍은 프로그램 실행 흐름은 외부 이벤트에 의해 결정되는 프로그래밍 패러다임이다. 이것은 외부 이벤트가 적절한 처리를 트리거하는 콜백 메카니즘을 사용하여 발생할 때 이벤트 루프를 포함한다 있습니다 .

 

비교하고 무엇을, 단일 스레드 멀티 스레드 및 이벤트 기반 프로그래밍 모델을 대조하는 예제. 다음 그림은 시간이 지남에 따라이 세 가지 모드 프로그램을 수행 한 작업을 보여줍니다. 이 프로그램은 각 작업 O.을 / I를 기다리는 자신의 작업을 차단하고 완료하는 데 세 가지 작업이 있습니다 I / O 작업에 시간 블록은 회색 상자에서 보낸 표시되었습니다. 

 

 초기 문제 : 어떻게 IO 작업이 그 위에 삭감 결정하는? 콜백 기능  (주의, CPU 운영 체제 호출하여 이벤트 기반 모니터 이벤트가 완료 될 때까지)

이벤트 기반 주석

IO 모델

참조 기사

https://www.cnblogs.com/yuanchenqi/articles/6248025.html

https://www.cnblogs.com/linhaifeng/articles/6817679.html#_label1

https://www.cnblogs.com/linhaifeng/articles/7430066.html

https://www.cnblogs.com/yuanchenqi/articles/5722574.html

추천

출처www.cnblogs.com/dreamer-lin/p/11696711.html