天天看點

多線程 - 多線程基礎

CPU 核心數 與 線程數 的關系

一個CPU 核心隻能跑一個線程

由于Intel公司引入的超線程技術,使得實體CPU核心和虛拟CPU核心存在一個1:2的關系拓展。

是以如下圖,原本4個核心的電腦,同時隻能跑4個線程;由于1:2關系,拓展為8個邏輯處理器,是以可以同時跑8個線程。

多線程 - 多線程基礎

CPU 時間片輪轉機制

Q:為啥我的電腦跑的程序遠遠多于CPU的邏輯處理器個數?

A:

CPU 将時間線分割成一個個的時間片

運用RR排程算法,進行時間片輪轉

每個線程輪流擷取CPU時間片進行操作

Q:為啥我感受不到線程在切換

人的反應時間在1s~0.01s

CPU執行一條指令 0.6納秒ns

1秒(s)=1000000000納秒(ns)

程序最大線程數限制

Linux 一個程序最多開1000個線程

Windows 一個程序最多開2000個線程

Q:為什麼限制?

A:每每new一個新線程,線程會通過程序向作業系統申請資源(作業系統不直接配置設定資源給線程,隻配置設定資源給程序)。程序再給該線程配置設定:

棧空間,預設值是1M,1000個線程會耗費1G。

句柄(檔案描述符)。句柄是用來指向記憶體位址的開頭位置。Linux限制最多1024個句柄

繼續閱讀