Python之進程與線程的區別

進程線程的區別聯繫

區別聯繫

【1】 兩者都是多任務編程方式,都能使用計算機多核資源

【2】進程的創建刪除消耗的計算機資源比線程多

【3】進程空間獨立,數據互不干擾,有專門通信方法;線程使用全局變量通信

【4】一個進程可以有多個分支線程,兩者有包含關係

【5】多個線程共享進程資源,在共享資源操作時往往需要同步互斥處理

【6】進程線程在系統中都有自己的特有屬性標誌,如ID,代碼段,命令集等。

使用場景

【1】任務場景:如果是相對獨立的任務模塊,可能使用多進程,如果是多個分支共同形成一個整體任務可能用多線程

【2】項目結構:多種編程語言實現不同任務模塊,可能是多進程,或者前後端分離應該各自爲一個進程。

【3】難易程度:通信難度,數據處理的複雜度來判斷用進程間通信還是線程同步互斥方法。

要求

1. 對進程線程怎麼理解/說說進程線程的差異?

    答:都是利用計算機多個資源進行多任務編程的實現方式;進程的創建銷燬相對於線程消耗的資源較多;一個進程內可以有多個線程;進程間通訊有特殊方法,線程間使用全局變量(共享資源)進行通訊,通訊時需要處理同步互斥問題。

2. 進程間通信知道哪些,有什麼特點?

    答:管道通信Pipe:單向或者雙向;消息隊列Queue:先進先出;內存共享Value/Array:共同影響全局變量 ;信號量Semaphore:控制信號量數量

3. 什麼是同步互斥,你什麼情況下使用,怎麼用?

    答:同步表示協作,人爲控制線程的先後順序,互斥表示同一時刻數據只能被一個線程所擁有,等待解鎖後,別的線程纔可使用,例如:轉賬系統,同一時刻發生轉賬的兩個賬戶金額必須進行上鎖處理,避免轉賬的同時別的線程對金額造成修改而產生數據混亂

4. 給一個情形,說說用進程還是線程,爲什麼?

    答:如果出發點時提高效率,建議使用進程,因爲線程因爲GIL問題,無法有效提高效率。IO密集型代碼(文件處理、網絡爬蟲等),多線程能夠有效提升效率(單線程下有IO操作會進行IO等待,造成不必要的時間浪費,而開啓多線程能在線程A等待時,自動切換到線程B,可以不浪費CPU的資源,從而能提升程序執行效率)。所以python的多線程對IO密集型代碼比較友好。

5. 問一些概念,殭屍進程的處理,GIL問題,進程狀態?

    答:殭屍進程使用singal模塊處理,GIL問題導致即使使用多線程處理計算密集型程序因爲無法提高效率,有時反而導致效率更低,進程狀態大體分爲:就緒,運行,等待三狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章