多執行緒與多程序 執行效率

2021-08-04 13:46:48 字數 1324 閱讀 7872

1、多執行緒在單核和多核cpu上的執行效率問題的討論

多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換哪個執行而已,其實並沒有快(反而慢)。多個

cpu的話就可以在多個

cpu中同時執行了。單核

cpu時使用多執行緒,通常是有執行緒要處於等待狀態。而對於普通的進度條更新類的,能夠簡單控制的(比如:在迴圈裡面手動處理訊息)就簡單控制,一般不使用執行緒,這樣可以提高程式的效能。並且避免掉不必要的執行緒同步問題。 2、

為什麼有時候執行緒數超過cpu核心數會更快呢?

原因是這種程式的單個執行緒運算量不足以佔滿cpu乙個核心(比如存在大量

io操作,

io比較慢,是程式瓶頸)。多執行緒的用處在於,做某個耗時的操作時,需要等待返回結果,這時用多執行緒可以提高程式併發程度。如果乙個不需要任何等待並且順序執行能夠完成的任務,用多執行緒簡直是浪費。

3、 執行緒越多越好嗎?什麼時候才有必要用多執行緒?

執行緒必然不是越多越好,執行緒切換也是要開銷的,當你增加乙個執行緒的時候,增加的額外開銷要小於該執行緒能夠消除的阻塞時間,這才叫物有所值。

4、多核與多執行緒

多核指的是cpu有多個核心,多執行緒是程式有多個執行緒在同時執行。多核也要用多執行緒才能發揮優勢。同樣,多執行緒要在多核上才能真正有優勢。這點來說,對程式設計師不是透明的。程式設計師可以控制程式

/執行緒在哪個

cpu(核)

上執行。使用者也可以控制程式在哪幾個核上執行。所以多核,多執行緒對使用者和程式設計師都不是透明的。程式設計師必須了解這方面的知識。才能讓程式最大限度的發揮機器的效能。

cpu分配時間片策略:

在併發執行中,cpu需要在多個程式之間來回切換,那麼如何切換就有一些策略

3.1 先來先服務 - 時間片輪轉排程

這個很簡單,就是誰先來,就給誰分配時間片執行,缺點是有些緊急的任務要很久才能得到執行。

3.2 優先順序排程

每個執行緒有乙個優先順序,cpu每次去拿優先順序高的執行,優先順序低的等等,為了避免等太久,每等一定時間,就給執行緒提高乙個優先順序

3.3 最短作業優先

把執行緒任務量排序,每次拿處理時間短的執行緒執行,就像我去銀行辦業務一樣,我的事情很快就處理完了,所以讓我插隊先辦完,後面時間長的人先等等,時間長的人就很難得到響應了。

3.4 最高響應比優先

用執行緒的等待時間除以服務時間,得到響應比,響應比小的優先執行。這樣不會造成某些任務一直得不到響應。

3.5 多級反饋佇列排程

有多個優先順序不同的佇列,每個佇列裡面有多個等待執行緒。 

cpu每次從優先順序高的遍歷到低的,取隊首的執行緒執行,執行完了放回隊尾,優先順序越高,時間片越短,即響應越快,時間片就不是固定的了。

佇列內部還是用先來先服務的策略。

python 多執行緒與多程序效率測試

目錄 在python中,計算密集型任務適用於多程序,io密集型任務適用於多執行緒 正常來講,多執行緒要比多程序效率更高,因為程序間的切換需要的資源和開銷更大,而執行緒相對更小,但是我們使用的python大多數的直譯器是cpython,眾所周知cpython有個gil鎖,導致執行計算密集型任務時多執行...

多執行緒與多程序

程序 程序是程式的一次執行,在傳統的計算機中,程序既是基本的分配單元,也是基本的執行單元。執行緒 執行緒是可執行的實體單元,它是處理機排程的基本單位。由於執行緒在同一位址空間,因此建立和撤銷執行緒的開銷小,執行緒間的通訊效率高,切換迅速。在多處理機系統中,對程序的個數有所限制,但對執行緒的個數不存在...

多執行緒與多程序

魚還是熊掌 多程序多執行緒的選擇 關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有的xdjm問 多程序好還是多執行緒好?...