연구는 결론을 내렸다 (34 %)

1. 스레드

       1) 스레드는 무엇인가

                  스레드 오퍼레이팅 시스템 프로세스에 포함되는 스케줄링 동작의 최소 단위이며, 스레드는 실행의 일정한 흐름이고

2. 쓰레드와 프로세스 사이의 관계

         스레드는 프로세스에 존재해야합니다 혼자 존재할 수 없다, 프로세스는 프로그램을 실행하는 데 필요한 모든 자원을 포함하는 자원 유닛은, 실행 유닛의 실제 스레드입니다

    어떤 스레드, 프로세스, 자원이 활용되지 수 없으므로 적어도 하나 개의 스레드를 포함하는 프로세스가, 우리가 프로그램을 시작할 때 운영 체제가 자신을 위해이 프로그램을 메인 스레드를 만들 것이다, 주 스레드라는 프로그램에 의해 스레드가 될 수 있습니다 후반에, 자신의 스레드를 열하면 자식 스레드라는

3. 왜 스레드가 필요합니까

               단 하나의 목적은 효율성을 개선하는 것입니다

4. 멀티 스레드 사용

              1) 모듈을 사용하는 방법

               2) Thread 클래스 상속, 다음 실행 ()을 재정의하는 방법

수입 스레드, current_thread 스레딩에서 
수입 시간 

데프 작업을 () : 
    인쇄 ( "2", current_thread ()) 
    ( "子가 실행进程") 인쇄 
    time.sleep을 (10) 
    인쇄 ( "子进程") 

의 경우 __name__ == '__main__ ' 
    t = 스레드 (대상 = 작업) 
    t.start () 
    인쇄 ( "主线程") 
    인쇄 ( "1", current_thread ()) 

클래스 myThread (나사) : 
    데프 실행 (자동) : 
          인쇄 ( "子进程TUN ") 
m = myThread () 
인쇄 ("父进程")

 

5. 스레드 기능

       1) 작은 오버 헤드를 만들기

       2) 동일한 프로세스 데이터의 다수의 스레드는 공유 될 수있다

       3) 다중 스레드, 동일한 관계는 사이에, 부모 - 자식 관계가없는, PID 모든 스레드가 동일

  

#创建线程开销对比
수입 운영 체제 
수입 스레드 스레딩에서 
가져 오기 프로세스 멀티 프로세싱에서 

수입 시간 


데프 작업을 () : 
    # 인쇄 ( "안녕하세요") 
    인쇄 (os.getpid는 ()) 
    에 합격 

하면 __name__ == '__main__': 

    = 시간 st_time. 시간 () 

    의 TS = [] 
    전 범위 (100)를 들어 
        t = 스레드 (목표 = 태스크) 
        #의 t = 프로세스 (목표 = 태스크) 
        t.start () 
        ts.append (t) 

    : TS에 대한 t 
        t. ) (가입 

    - 인쇄 (st_time로 time.time ()) 
    ( "이상主") 인쇄

  

6. 데몬 스레드

           당신은 다른 스레드에 데몬 스레드로 스레드를 설정할 수 있습니다

          특징 : 나사 끝이 후 데몬 스레드 가드는 끝났다

수입 스레드 스레딩에서 
수입 시간 

: 데프 작업 () 
    인쇄 ( "子의 1running ......") 
    time.sleep (100) 
    인쇄 ( "子의 1over ......") 

데프 task2을 () : 
    인쇄 ( "子의 2running ......") 
    time.sleep (4) 
    인쇄 ( "子의 2over ......") 
    
t = 스레드 (목표 = 태스크) 
t.daemon = TRUE 
t.start () 

T2 = 스레드 (대상 = task2) 
t2.start () 

인쇄 ( "이상主")

  

7. 쓰레드 뮤텍스

      공유 경쟁을 의미

       스레드는 또한 보안 문제입니다,

       여러 개의 스레드를 동시에 실행할 수 있으며, 동일한 자원에 대한 동시 액세스하면, 문제가있을 것입니다

       해결 방법 : 아직 뮤텍스

수입 스레드 스레딩에서, 잠금 열거 
수입 시간 

수 = 10 

잠금 = 잠금 () 

데프 작업을 () : 
    글로벌 번호 
    lock.acquire () 
    A = 번호 
    time.sleep (0.1) 
    수 = A - 1 
    lock.release () 

를 들어 범위에서 I (10) : 
    t = 스레드 (목표 = 태스크) 
    t.start () 

열거 t에 대한 () [1] 
    # 토너 (t) 
    t.join () 
    
인쇄 (수)

8. 교착 상태

, current_thread, 스레드에서 잠금 가져 오기 스레딩 

"" " 
    교착 
    프로그램이 다른 스레드가 보유한 잠금보다 더있어왔다 때, 자원이 두 개의 잠금 장치를 사용하기 위해 가지고 있어야이 
    프로그램이 무제한 처리 할이 시간을 교착 상태라고 붙어 상태, 
    예를 
        접시와 젓가락을 먹고 있지만, 젓가락에게 같은 젓가락 접시 요리 잡고 다른 사람 들고 사람이 있어야 
    
    교착 상태 방지하는 방법   
        잠금이 적절한보다 더이없는 
        경우를 교착 상태의 문제는 당사자가 잠금을 넘겨 강요해야 발생합니까 
        
"" " 
가져 오기 시간 
# 플레이트 
lock1 = 잠금 () 

# 젓가락을 
lock2 = 잠금 () 

DEF의 eat1 () : 
    lock1.acquire () 
    인쇄 ("%의 S 잡아 판에 "%의 current_thread (). 이름) 
    합니다 (time.sleep 0.5) 
    lock2.acquire () 
    ". 이름) (current_thread의 %를 인쇄 ( "%의 S 젓가락 잡아) 

    (인쇄 (% (S)가 식사를 시작했다!"%의 current_thread " ).이름) 
    lock2.release ()
    인쇄 (. %의 current_thread () 이름 "%의은 젓가락을 내려 놓고") 

    lock1.release () 
    인쇄 (. "%의 아래 판"%의 current_thread () 명) 


: DEF의 eat2 () 
    lock2.acquire () 
    인쇄 ( "% s을 (를) 잡아 젓가락 "%의 current_thread (). 이름) 

    lock1.acquire () 
    인쇄 ("판 "%의 current_thread. (이름) 잡아 %의 S) 


    인쇄 ("먹을 개방 %의 S! "%의 current_thread을 (). 이름) 


    lock1 .release () 
    인쇄 ( "% S 다운 플레이트"%의 current_thread (). 명) 
    lock2.release () 
    인쇄 (current_thread %의 (). 이름 "% S는 젓가락 내려") 


T1을 = 스레드 (목표 = eat1) 


T2 = 스레드 (목표 = eat2) 

t1.start () 
t2.start ()

  

9. 재진입 잠금

       Rlock 재진입 또는 재귀 잠금 잠금이라고

      교착 상태 문제를 해결하는 데 사용되지 Rlock

           잠금을 가진 유일한 차이점은 : 동일한 스레드에서 R 잠금 장치는 몇 번을 취득 실행할 수 있지만 실행은 해당 자료를 여러 번 획득해야 스레드가있는 경우

          획득을 수행 한 다른 스레드가 실행되지 않습니다 취득

수입 RLock, 잠금, 나사 삽통에서 

# L = 잠금 () 
#의 
#의 l.acquire () 
# 인쇄 ( "1") 
#에 l.acquire () 
# 인쇄 ( "2") 


L = RLock () 

#의 l.acquire을 () 
# 인쇄 ( "1") 
#의 l.acquire () 
# 인쇄 ( "2") 

데프 작업 () : 
    l.acquire () 
    인쇄 ( "子실행 ......") 
    l.release () 


#主线程锁了一次
l.acquire () 
l.acquire () 

l.release () 
l.release () 
T1 = 스레드 (목표 = 태스크) 
t1.start ()

  

10. 세마포어

"" " 
 세마포어는 알고 
잠금 RLock이 

코드가 동시에 액세스하는 방법을 많은 스레드 될 수 있지만 지금 잠글 수 있습니다 
잠금 장치가 동시에 하나의 화장실 잠금 
사람들의 무리가 될 수 같은 시간에 공중 화장실을 잠그는 세마포를 


만 동시성 제어의 경우 : 액세스 동시 수정으로 인한 문제를 방지하지 않습니다 
"" " 

스레딩 가져 오기 세마포어에서, 스레드 
가져 오기 시간 

S = 세마포어 (5.) 
DEF 작업 () : 
    s.acquire () 
    인쇄 ("하위-RUN ") 
    . (3) time.sleep 
    인쇄 ( "하위 오버") 
    s.release () 

범위에서 I에 대한 (10) : 
    T는 스레드 (대상 = 작업) = 
    ) (t.start를

  

 

추천

출처www.cnblogs.com/xzcvblogs/p/10974580.html