python繫結核心 程序繫結CPU

2021-10-12 11:20:38 字數 855 閱讀 8418

程序繫結cpu

本文所講述內容僅適用於linux環境

1. cpu親和性

cpu親和性是指程序在某個給定的cpu上長時間執行,盡可能少的遷移到其他處理器的傾向性。linux核心的程序排程器天生就具有這樣的特性,它盡可能保證乙個程序不在處理器之間頻繁的遷移,頻繁的遷移意味著會增加cpu快取miss的概率,增加從主存到cpu快取的複製時間。

2.6版本linux核心新增了乙個機制,它允許開發人員可以程式設計實現硬cpu親和性,即程式可以顯示的指定程序在哪個cpu上執行。

2. cpu親和性應用場景

有大量計算

系統對時間敏感,對效能要求高

最常見的例子就是nginx,在配置nginx子程序的數量時,一般設定成cpu的核心數,同時通過設定worker_cpu_affinity,將不同的子程序繫結到不同的cpu核上,來增強nginx的響應能力。

如果你的伺服器只有乙個核,那麼是否繫結也就無所謂了。

3. python程式如何繫結cpu

linux 核心 api 提供了一些方法,讓使用者可以修改位掩碼或檢視當前的位掩碼:

sched_set_affinity() (用來修改位掩碼)

sched_get_affinity() (用來檢視當前的位掩碼)

python開發人員不需要使用這麼底層的api,第三方庫psutil就可以完成這些操作

import psutil

count = psutil.cpu_count()

p = psutil.process()

cpu_lst = p.cpu_affinity() # [0, 1, 2, 3]

p.cpu_affinity([0, 1]) # 將程序繫結到0和1這兩個cpu核上

為程序繫結CPU

taskset 是乙個cpu 調節工具,能夠將系統任務分配至指定的cpu 本文以nodejs為例 第一步,查詢nodejs 程序 pgrep node 19277 19283 第二步,鎖定cpu taskset pc 0 19277 其中0代表cpu0,以此類推 taskset pc 1 19283...

C 靜態繫結和動態繫結

c 為了支援多型性,才用了動態繫結和靜態繫結。首先理解四個名詞 1.物件的靜態型別 物件在宣告時採用的型別,是在編譯期確定的。2.物件的動態型別 目前所指物件的型別,是在執行期決定的。class b class c public b class d public b d pd new d pd的靜態...

C 動態繫結與靜態繫結

為了支援c 的多型性,才用了動態繫結和靜態繫結。理解他們的區別有助於更好的理解多型性,以及在程式設計的過程中避免犯錯誤。需要理解四個名詞 1 物件的靜態型別 物件在宣告時採用的型別。是在編譯期確定的。2 物件的動態型別 目前所指物件的型別。是在執行期決定的。物件的動態型別可以更改,但是靜態型別無法更...