cpu的四核 八邏輯處理器
這樣的處理器使用了超線程技術,所以每個核心是兩個線程,所以4個物理核心就是8個線程。
所以在操作系統的設備管理器裏面看到的CPU數量是實際物理CPU數量的兩倍
例如八個邏輯處理器 ,出去系統主線程。以windows爲例,當前是10%左右
如果跑滿,按照8個邏輯算,100/8=1.25 1.25*7=8.75 也就是再增加7個線程 87.5%接近佔滿
java跑滿cpu
public class MyTest {
public static void main(String[] args) {
for (int i = 0; i < 7; i ++) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
int i = 0;
}
}
}).start();
System.out.println(1);
}//
}
}
python多線程和多進程跑滿CPU
1.使用多線程 現象cpu佔用只多了一個邏輯處理器,也就是佔用提升了12.5%左右。所以多線程沒有實現佔滿CPU。因爲python中存在GIL鎖,這個GIL全局鎖實際上把所有線程的執行代碼都給上了鎖。所以只能用到一個邏輯核。
2.使用多進程 相同的使用7個進程,可以佔滿CPU。因爲每個進程存在一個單獨全局GIL鎖,相互不影響。
import multiprocessing, time
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
count = multiprocessing.cpu_count()
print('cpu count : ', count)
def loop():
while True:
x = 1
if __name__ == '__main__':
count = 6
with ThreadPoolExecutor(max_workers=8) as pool:
for j in range(count):
print(j)
pool.submit(loop)
#count = 7
#with ProcessPoolExecutor(max_workers=8) as pool:
# for j in range(count):
# print(j)
# pool.submit(loop)