PYTHON-進程 子進程

併發編程    學習目標: 見35複習一、操做系統       什麼是操做系統       操做系統的兩大做用:       批處理操做系統:   操做系統發展史:      多道技術*****        產生背景:        兩大核心點:      應用軟件的優化的核心:*****二、進程    一、進程理論(*****)        一、進程與程序區別        二、併發,並行,串行是什麼        三、不一樣操做系統開啓子進程的區別        四、一個進程的三種運行狀態    二、開啓進程的兩種方式(*****)    3.多進程的執行順序 ******    四、進程對象的經常使用屬性    5 殭屍進程和孤兒進程(瞭解)**    六、守護進程(**) 見36複習    七、互斥鎖與信號量(**)        是什麼        爲何使用        互斥鎖與join的區別:        如何使用        注意強調點        Semaphore信號量(瞭解)    八、IPC機制:隊列,管道(*)      三種方式    九、進程queue=管道+鎖 (***)    十、生產者消費者模型(*****) 見37複習        一、什麼是生產者消費者模型?        二、什麼用生產者消費者模型?        三、爲何要用生產者消費者模型?好處?        四、如何實現?        總結點三、線程      一、線程理論(*****)見37複習          一、是什麼          二、線程vs進程      二、開啓線程的兩種方式(*****)      三、守護線程(**)      四、互斥鎖與信號量(**)見38複習      五、GIL vs 互斥鎖(*****)          一、什麼是GIL          二、GIL的影響          三、GIL的優缺點:          四、GIL vs 互斥鎖        6 Cpython的解釋器下*****      七、死鎖現象與遞歸鎖(**)      八、線程queue(***)      九、Event事件(**)四、池(*****)見38複習    是什麼    爲什麼要用池:    何時用池:    如何用池?    總結點五、單線程下實現併發(***) 見39複習    1 同步調用 異步調用+回調機制        提交任務的兩種方式:        什麼是同步異步        任務執行的三種狀態:         同步調用vs阻塞,兩種不一樣的'等'的效果        異步回調  ******            什麼是異步回調?            爲何須要回調?(好比 燒水壺,水燒開後 水壺會發出響聲)            注意點:            回調函數何時被執行?            誰在執行回調函數?            線程的異步回調    2.線程隊列 **        隊列        堆棧        優先級隊列    三、單線程下實現併發(***)            什麼是協程                併發                併發實現的本質=切換+保存狀態(兩類切換)            高性能分析:            爲何須要協程            如何實現協程(三種)            協程的應用場景:            總結點:六、網絡IO模型(主要掌握理論***) 見40複習    網絡傳輸中的兩個階段    1.阻塞IO    2.非阻塞IO    3.多路複用    4.異步IOsockserver---------------------------------------------------併發編程    學習目標:讓服務器可以支持高併發+高性能一、什麼是操做系統        操做系統是位於計算機硬件與應用軟件之間        用於協調、控制、管理計算機硬件與軟件的資源的一種控制程序   操做系統的兩大做用:    一、把複雜醜陋的硬件操做都封裝成美麗的接口,提供給應用程序使用    二、把進程對硬件的競爭變的有序  操做系統發展史:    第一代計算機 程序是固定 沒法修改 某種計算機只能幹某種活    第二代計算機 批處理系統 須要人工參與 將程序攢成一批 統一執行                串行執行 提升計算機的利用率 可是調試麻煩       批處理操做系統:(串行)            把程序員的程序攢成一堆            而後批處理系統讀一道程序到內存而後執行            執行完畢後輸出,而後才能讀入下一道程序。。。    第三代計算機 爲了更好利用計算機資源 ,產生了多道技術  多道技術*****    產生背景:在單核背景下實現多個進程併發執行的效果    兩大核心點:    一、空間上的複用 (多道程序複用內存的空間)        內存分割爲多個區域 每一個區域存儲不一樣的應用程序        內存中同時讀入多道程序,多道程序的內存空間是物理隔離的    二、時間上的複用  (多道程序複用CPU時間)        切換+保存狀態        1 正在執行的進程遇到IO操做時 會切換到其它程序            能夠提升效率        2 運行時間過長 或者有一個優先級更高的進程搶走了CPU            反而會下降效率        (固然由於cpu速度賊快 用戶感受不到)!!!!!應用軟件的優化:最核心的優化就是減小IO操做,減小對硬盤的讀寫操做二、進程    一、進程理論(*****)        進程:正在進行的一個過程或者說一個任務。而負責執行任務則是cpu。       舉例(單核+多道,實現多個進程的併發執行):        egon在一個時間段內有不少任務要作:python備課的任務,寫書的任務,交女友的任務,王者榮耀上分的任務,          但egon同一時刻只能作一個任務(cpu同一時間只能幹一個活),如何才能玩出多個任務併發執行的效果?        egon備一會課,再去跟李傑的女友聊聊天,再去打一會王者榮耀....這就保證了每一個任務都在進行中.     進程與程序區別        程序說白了就是一堆文件        進程就是一個正在執行的過程/程序 是一個資源單位        二、併發與並行        併發:看起來同時運行,實際上 不一樣任務間來回切換            單核就能夠實現併發,可是單核沒法實現並行        並行:真正意義上的同時運行,一個cpu同一時刻只能作一件事            只有多核才能同時作多件事,即並行的效果        串行:按照固定的順序一個個地執行(第一個任務沒執行完 第二個只能等待)        三、不一樣操做系統開啓子進程的區別            windows-CreateProcess            unix-fork            都會拷貝父進程的狀態,            區別點是unix系統fork拷貝的子進程的初始狀態和父進程如出一轍.            進程的終止            windows-ExitProcess            unix-exit        四、一個進程的三種運行狀態            運行態(正在執行)-            阻塞態(遇到IO)-            就緒態(運行時間過長/有優先級更高的搶走CPU)            只有運行態和就緒態能夠來回切換            阻塞態切換到運行態時 須要通過就緒態    二、開啓進程的兩種方式(*****)        1.直接實例化Process這個類 參數target中傳入任務函數        2.繼承Process類 實現run函數       方式一:        from multiprocessing import Process        import os,time        def task(name):            print('%s is running' %os.getpad())        if __name__ == '__main__':            obj=Process(taget=task,args=('egon',))            obj.start() # 發送信號給操做系統            print('主')       方式二:        from multiprocessing import Process        import os,time        class Work(Process):            def run(self):                print('%s is ruuning' %self.pid)                time.sleep(3)        if __name__ == '__main__':            obj=Work()            obj.start() # 發送信號給操做系統            print('主')    (啓動進程的方式        1.系統初始化 會產生一個根進程        2.用戶的交互請求 鼠標雙擊某個程序        3.在一個進程中 發起了系統調用啓動了另外一個進程 ******        4.批處理做業開始 某些專用計算機可能還在使用)    3.多進程的執行順序 ******        主進程必然先執行        子進程應該在主進程執行後執行        一旦子進程啓動了 後續的順序就沒法控制了    四、進程對象的經常使用屬性        obj.start() 開啓進程        obj.join(1) 父進程等待子進程        obj.terminate() 終止進程        obj.is_alive()  是否存活        obj.pid  獲取進程id        obj.name 進程名稱        "我是主程序個人pid:%s 個人父進程是:%s" % (os.getpid(),os.getppid())        "我有一個兒子是 %s" % obj.pid    5 殭屍進程和孤兒進程(瞭解)**        殭屍進程:有害            一個子進程任務執行完就死亡了 可是操做系統不會當即將其清理            爲的是 開啓這個子進程的父進程能夠訪問到這個子進程的信息(如PID)            這樣已完成任務的 可是沒有被操做系統清理的進程稱爲殭屍進程            直到父進程結束後發起調用回收子進程(減小PID佔用),殭屍進程越少越好        孤兒進程:無害!            沒有爹的稱爲孤兒            一個父進程已經死亡 然而他的子孫進程還在執行着  這時候操做系統會接管這些孤兒進程
相關文章
相關標籤/搜索