進程,線程
單核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實現線程之間的通訊,