1. 程式人生 > >進程,線程

進程,線程

進程終止 mut 啟動 tar 執行方法 進程 關閉 互斥鎖 拷貝

進程,線程 單核cpu一次只能執行一個任務, 電腦運行速度 cpu程序運行:時間片輪訓,調度算法 優先級調度算法 視覺散流:1/24秒 並發和並行: 並行:真正的同時執行多個任務 並發:操作系統就是並發的,看起來是同時執行的 操作系統實現多任務的原理是: 通過調度算法調度任務執行實現多任務 進程的創建---fork() 叉 fork:叉,餐叉,靶,叉起,分叉,分歧 進程:代碼,cpu,內存,磁盤,網絡資源 代碼是程序:運行的程序時進程。 進程是分配資源的最小單位 pid是進程號,pid子進程= 0 父進程返回子進程pid大於0的 方便管理進程 創建完fork()之後,各自執行各自的 對於子進程pid = =0 孤兒進程:父進程先死,子進程再死
僵屍進程:子進程先死,父進程再死 僵屍進程:弊端:僵屍仍然占用資源,麽有釋放。 解決僵屍進程:我們的子進程回收,通過父進程進程回收 os.wait 資源回收, 多進程開發:需要回收子進程資源 獲取pid :getpid():獲取當前進程的pid,getppid():獲取父類pid fork完成以後資源進行了拷貝,不共享全局變量 fork完成之後,系統調度進行導致,執行流程操作系統說了算,根據現狀,有可能讓子進程先執行也有可能讓父進程先執行 執行無序性: Process(group【】) target= 指定繼承要執行的任務 agrs,參數:任務參數 args,是一個 kwargs:調用對象的關鍵字參數字典
name。為當前進程實例的別名 group:大多數情況下用不到,進程分組 Process類常用屬性: name; pid: is_alive:進程死活 join:回收進程資源,默認阻塞 join 必須在terminate之後 terminate:進程終止,不回收資源 總結: 多任務的概念: 多任務的實現原理:通過調度算法實現1,時間輪流,2 ,優先級 並行並發: 並行:一起執行的 並發:看起來是一起執行的,對人來說的, 計算機是怎麽調度任務的:跟換進程任務,通過中斷,來實現 qq,通過中斷,qq中的所有資源,快照,保存狀態, 掛起:執行掛起的,會保存當前的狀態, fork():創建新的進程:給我們返回兩個值
通過pid返回值來判斷實現多任務的 fork主進程和子進程有設麽關系 fork後的子進程會把主進程的所有資源拷貝(代碼執行狀態) 僵屍進程的危害:僵屍進程會占用系統資源 通過wait回收進程資源, 僵屍進程:子進程死了,主進程沒死,子程序還占有資源 孤兒進程:會丟到1號進程 多進程修改全局變量:多進程資源不共享 多次for問題:依賴fork創建過程 為了便於回收資源,解決方案:只有一個主進程:讓主進程生成 子進程, multiProcessing 通過process類, 1.導入 2.定義子進程執行方法 3.初始化process對象(args元組最後要加一個,) 4.start啟動我們進程 5.join回收資源(多個子進程回收) 5.join阻塞回收 阻塞超時,如果子進程沒有執行完,就走了,如果執行 process子類 重寫run方法,其它方法和proces方法一樣 進程池pool 隨用隧取,提高了效率 進程多了影響運行效率: 解決辦法:再建一個模塊,實時檢測cpu和進程的運行狀態,動態的 調整 queue==進程間通信----隊列 特點:先進先出 目的:方便進程間管理 pool:1構造進程池(指定進程數量)默認回收,老爹死的時候帶所有兒子 共赴黃泉---join()阻塞等待回收所有的子進程 調用完close()的時候,關閉進程池,不能再添加任務, 進程的通信:queue隊列: 隊列process使用了multiprecess queue 進程池使用manager中的queue 1.創建隊列 2.我的子進程啟動的時候,把隊列傳遞到子進程中 3.A進程--》B進程,創建一個隊列,B-->A再創建一個隊列 queue使用方法:get put最後阻塞等待,2,put_nowait以判斷空或者滿 try捕獲異常 線程部分 1.線程:進程中的代碼流程 進程和線程的區別: 1.進程最小的資源分配單位,線程最小的任務調度單位 2.進程占有獨立的資源,線程共享進程中的資源 3.進程創建和調度開銷大,效率低,線程相反 4.線程依賴於進程,一個進程至少有一個線程 5.全局資源:線程不安全,進程安全 多線程threading 1.創建過程:1定義線程方法 2.實例化線程對象 target,args(,)啟動線程,回收線程,線程的執行順序:無序的,操作系統的調度造成的 2.全局變量:線程共享全局資源,線程之間通信方便,效率高,線程不安全(通過線程同步解決不安全) 3.互斥鎖: mutex = threading.Lock() 創建鎖 mutex.acquire() 鎖定 mutex.release() 釋放   4.queue實現線程之間的通信,

進程,線程