多執行緒python和多程序的區別

2021-12-20 06:24:31 字數 1634 閱讀 7673

1樓:

多程序共享資源必然會帶來程序間相互競爭。

而這種競爭又會造成race condition,我們的結果有可能被競爭的不確定性所影響。

但如果需要,我們依然可以通過共享記憶體和manager物件這麼做。

python多程序和多執行緒的區別

2樓:夢囈罒幻羽

多執行緒指的是一復個程序有多個線制

程執行,執行緒之bai間能夠共用資du

源,但是隻zhi能靠一個cpu執行dao

,效率不高。

多程序指的是多個程序同時執行,並佔用多個cpu,實現並行,效率高,但是程序之間不能隨意共享資源,只能通過管道和程序佇列交換資料

python 多執行緒和多程序的區別 mutiprocessing theading

為什麼在python裡推薦使用多程序而不是多執行緒

3樓:匿名使用者

因為python的底層實現gil對於多執行緒的支援並不好。還是隻使用cpu的一個核,效率不高

如果是多程序的話,可以充分利用cpu,就是資源可能會用的多一點

為什麼在python裡推薦使用多程序而不是多

4樓:

最近在看python的多執行緒,經常我們會聽到老手說:「python下多執行緒是雞肋,推薦使用多程序!」,但是為什麼這麼說呢?

要知其然,更要知其所以然。所以有了下面的深入研究:

首先強調背景:

1、gil是什麼?

gil的全稱是global interpreter lock(全域性直譯器鎖),**是python設計之初的考慮,為了資料安全所做的決定。

2、每個cpu在同一時間只能執行一個執行緒(在單核cpu下的多執行緒其實都只是併發,不是並行,併發和並行從巨集觀上來講都是同時處理多路請求的概念。但併發和並行又有區別,並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔內發生。)

在python多執行緒下,每個執行緒的執行方式:

1、獲取gil

2、執行**直到sleep或者是python虛擬機器將其掛起。

3、釋放gil

可見,某個執行緒想要執行,必須先拿到gil,我們可以把gil看作是「通行證」,並且在一個python程序中,gil只有一個。拿不到通行證的執行緒,就不允許進入cpu執行。

在python2.x裡,gil的釋放邏輯是當前執行緒遇見io操作或者ticks計數達到100(ticks可以看作是python自身的一個計數器,專門做用於gil,每次釋放後歸零,這個計數可以通過 sys.setcheckinterval 來調整),進行釋放。

而每次釋放gil鎖,執行緒進行鎖競爭、切換執行緒,會消耗資源。並且由於gil鎖存在,python裡一個程序永遠只能同時執行一個執行緒(拿到gil的執行緒才能執行),這就是為什麼在多核cpu上,python的多執行緒效率並不高。

那麼是不是python的多執行緒就完全沒用了呢?

在這裡我們進行分類討論:

1、cpu密集型**(各種迴圈處理、計數等等),在這種情況下,由於計算工作多,ticks計數很快就會達到閾值,然後觸發gil的釋放與再競爭(多個執行緒來回切換當然是需要消耗資源的),所以python下的多

python多執行緒怎樣執行函式,pythonthreading模組,生成多執行緒之後,怎麼得到執行緒執行完成後return出的字串呢?

正常執行 但是執行緒執行狀態不受函式的控制 import threading threads 啟動多執行緒 if name main for t in threads t.setdaemon true t.start t.join 更多詳細操作help threading python thread...

c 多執行緒程式設計問題,C 多執行緒程式設計問題

如果兩個執行緒能同時執行,那麼效能可以提高一半,這裡有個前提條件 你的程式執行時被分配兩個cpu核心,並且執行過程中沒有意外的中斷。在實際的環境中,作業系統的程序數和執行緒數總是多於cpu核心的數量,你不能保證程式的每次執行總能獲得合適的cpu數以及執行過程中不會被中斷,也許某一次的執行是所有執行緒...

多工和單任務,多執行緒和單執行緒各有什麼區別呢

多工單任務不知你指的什麼,是系統的還是程式的。多執行緒和單執行緒倒是略知一二。執行緒是依託於程序存在的,一個程序裡要是不想被一個任務堵塞的話通常用多執行緒。打個比方好理解。單執行緒就是獨木橋,多執行緒就是寬敞的橋,獨木橋上一個人摔倒了整個通道都堵塞了,寬敞的橋有人摔倒了,一條線路堵塞了,其他的人可以...