簡體   English   中英

使用多處理池時,工作進程數應與CPU或內核數相同嗎?

[英]When using multiprocessing Pool should the number of worker processes be the same as the number of CPU's or cores?

使用Python多處理池時,輔助進程的數量應該與CPU或內核的數量相同嗎?

本文http://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/說,每個內核實際上是CPU芯片上的中央處理單元。 因此,似乎有1個進程/核心應該沒有問題

例如,如果我有一個帶有4個內核的CPU芯片,則可以運行1個進程/每個內核總共4個進程而不會降低性能。

從我所學到的有關python和多處理的知識來看,最好的做法是...

  • 每個內核一個進程,但是跳過邏輯進程。

超線程對python沒有幫助。 在許多情況下,它實際上會損害性能,但是請您首先對其進行測試。

  • 使用親和力(pip install親和力)模塊將每個進程綁定到特定核心。

至少在使用32位python的Windows上進行了廣泛的測試,由於不斷地破壞緩存,不這樣做會嚴重損害性能。 再說一次:跳過邏輯核心! 假設您有一個具有超線程功能的Intel CPU,則邏輯值為1,3,5,7,依此類推。

線程數多於實際內核將無濟於事,除非同時發生IO,如果您正在處理數字,也不應這樣做。 自己測試我的主張,尤其是在使用Linux的情況下,因為我根本沒有在Linux上進行測試。

這實際上取決於您的工作量。 視情況而定,最好的方法是運行一些基准測試並查看結果。

計划進程是一項昂貴的操作,進程越多,您需要更改上下文的時間就越多。

如果大多數進程未運行(例如,它們正在等待IO),則過量使用可能會被證明是有益的。 相反,如果您的進程大部分時間都在運行,則添加更多爭用CPU的進程將是有害的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM