1. 程式人生 > >python多線程,多進程編程。

python多線程,多進程編程。

exit children 調用 多核 auth 目前 單元 參考 博客

程,是目前計算機中為應用程序分配資源的最小單位;

進程,是目前計算機中運行應用程序的最小單位;

在實際系統中,其實進程都是被分為進程來實現的,所以參與時間片輪轉的是線程

  但是管理應用程序的資源的單位和任務調度的單位都是進程。更像是一個邏輯概念。

線程是進程分出來的更精細的單位,線程間的上下文切換比進程間的上下文切換,要快很多。

  技術分享圖片

多進程與多核,這個概念很奇怪,因為進程是不會直接在核心上運行的。

多線程與多核,涉及一個內核線程與用戶線程的對應關系

內核線程(Kernel Thread),一般與核心是一一對應的,一個處理核心對應一個內核進程。

目前的計算機,配置一般都是超線程的,即通過硬件冗余,將一個物理核心模擬成兩個邏輯處理核心

  對應兩個內核線程。所以在操作系統中看到的CPU是實際物理核心的兩倍。

  如雙核四線程,四核八線程

------------------------------------------------------------------------

  intel的cpu為了實現分支預測等技術,一般每個內核的運算單元是雙份的,-------超線程

  服務器方面的物理核心的運算單位,可能會更多,支持更大的超線程

------------------------------------------------------------------------

用戶線程與內核線程的對應關系:

  1) 一一對應,由於內核線程很少,所以限制了很多用戶線程的執行數量;

  2) 多對一,用戶線程很慢,影響調度;

  3) 多對多,目前應用的模式,

  技術分享圖片

python中的多進程庫,multiprocessing,提供的方法和屬性:

屬性:authkey,daemon(父進程終止後,自動結束子進程,必須在start之前設置),exitcode,name,pid

方法: Process(target,name,args,kwargs),創建進程對象

    is_live(),進程狀態

    join(‘timeout‘),表示等待後臺的進程運行結束,如果指定timeout,一定時間後,殺掉進程

    run(),

    start(),

    terminate(),

    join(),等所有的後臺子進程執行好;

    cpu_count(),返回當前擁有的cpu的個數,超線程之後的。

進程創建時,target可以指定為一個函數,也可以直接例化一個進程class。

創建函數process:

    技術分享圖片

創建class進程,start()之後,會自動調用run()函數:

    技術分享圖片

加入daemon屬性:並不會等到該worker的process結束,程序就執行結束了。

    技術分享圖片

多進程遍歷:active_children()

    技術分享圖片

還可以加入lock,semaphore,實現對共享資源的控制,event,進程間通信。

  還有進程隊列(Queue),和進程管道(Pipe)

Pool,進程池,不需要自己在管理進程的數量,進程池自動管理。

    如果池中的進程數量達到閾值,阻塞其他進程。

參考博客

https://www.cnblogs.com/kaituorensheng/p/4445418.html

python多線程,多進程編程。