Python

如何理解 Cpus_allowed 和執行緒 ID 號?

  • September 7, 2018

環境:作業系統——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。

  1. http://man7.org/linux/man-pages/man5/proc.5.html
  • cpus_allowed:可以執行此程序的 CPU 遮罩

(從 Linux 2.6.24 開始,請參見 cpuset(7))。

這不是 CPU 的數量,而只是告訴您程序執行緒正在哪個 CPU 上執行

  1. PPID 代表父程序 ID。這是您正在檢查的程序的父程序。
  2. http://linuxcommand.org/lc3_man_pages/ps1.html

psr 程序目前分配到的 PSR 處理器。

直接來自手冊頁的範例供參考:ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

大多數此類資訊都可以在手冊頁中找到,但我知道它們包含很多資訊,而且很難追踪。

引用自:https://unix.stackexchange.com/questions/420080