小白來看:cpu核數、邏輯處理器及java和python如何跑滿CPU

cpu的四核 八邏輯處理器

這樣的處理器使用了超線程技術,所以每個核心是兩個線程,所以4個物理核心就是8個線程。
所以在操作系統的設備管理器裏面看到的CPU數量是實際物理CPU數量的兩倍

例如八個邏輯處理器 ,出去系統主線程。以windows爲例,當前是10%左右

cpu1

如果跑滿,按照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);
        }//
    }
}

CPU2

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章