Python
如何理解 Cpus_allowed 和執行緒 ID 號?
環境:作業系統——debian + python3。
下面的所有輸出資訊都忽略不重要。
使用 cat /proc/cpuinfo 獲取我電腦的 cpu 資訊:
cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model name : Intel(R) Celeron(R) CPU G1840 @ 2.80GHz physical id : 0 siblings : 2 core id : 0 cpu cores : 2 processor : 1 vendor_id : GenuineIntel cpu family : 6 model name : Intel(R) Celeron(R) CPU G1840 @ 2.80GHz physical id : 0 siblings : 2 core id : 1 cpu cores : 2
這是要測試的 mthreads.py。
import os import threading print(os.getpid()) def dead_loop(): while True: pass t = threading.Thread(target=dead_loop) t.start() dead_loop() t.join()
在帶有 的終端中執行它
python3 mthreads.py
,獲取3455
作為程序 id 的輸出python3 mthreads.py
。cat /proc/3455/status Name: python3 Umask: 0022 State: S (sleeping) Tgid: 3455 Ngid: 0 Pid: 3455 PPid: 2205 Threads: 2 Cpus_allowed: 3 Cpus_allowed_list: 0-1
在終端中執行它。
python3 mthreads.py 3455
1.我的電腦有2個cpu,為什麼Cpus_allowed是3,比我的cpu多?
pstree 3455 -p python3(3455)───{python3}(3456)
2.現在有aer 2個執行緒在執行,3455是程序號,3456是執行緒號,另一個執行緒號是哪個?如何獲得第二個執行緒ID號?
3.我想知道哪個cpu(cpu0,cpu1)上執行的是哪個程序ID?
有時程序id=執行緒id。
顯示我的程式碼。
python3 mthreads.py 7761 cat /proc/7761/status|grep Threads Threads: 2 pstree -p 7761 python3(7761)───{python3}(7762)
LWP 表示可調度實體的輕量級程序(執行緒)ID(別名 spid,tid),NLWP 表示 man ps 頁中程序中的 lwps(執行緒)數。
ps -p 7761 -f -L UID PID PPID LWP C NLWP STIME TTY TIME CMD user 7761 2305 7761 48 2 19:28 pts/1 00:00:09 python3 mthreads.py user 7761 2305 7762 51 2 19:28 pts/1 00:00:09 python3 mthreads.py
程序 id–7761 包含兩個執行緒,一個執行緒 id 是 7761,與程序 id 值相同,另一個執行緒 id 是 7762。
- cpus_allowed:可以執行此程序的 CPU 遮罩
(從 Linux 2.6.24 開始,請參見 cpuset(7))。
這不是 CPU 的數量,而只是告訴您程序執行緒正在哪個 CPU 上執行
- PPID 代表父程序 ID。這是您正在檢查的程序的父程序。
- http://linuxcommand.org/lc3_man_pages/ps1.html
psr 程序目前分配到的 PSR 處理器。
直接來自手冊頁的範例供參考:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
大多數此類資訊都可以在手冊頁中找到,但我知道它們包含很多資訊,而且很難追踪。