一、進程和線程的概念
1、進程
進程是操作系統進行資源分配的最小單元,資源例如:cpu,內存,磁盤IO。進程之間是獨立的。例如我們在windows上安裝的一個PPT程序叫應用程序,當我們啓動我們的PPT程序,操作系統中就會存在一個PPT的應用程序進程。
2、線程
線程是CPU調度的最小單位,必須依賴於進程存在,不能獨立存在。一個進程可以擁有多個線程,線程可以共享進程的資源,包括內存、磁盤IO。
二、CPU核心數和線程數的關係
通過下圖看到我們計算機的一個配置信息:內核是4個,邏輯處理器是8個,也就意味着CPU核心數是4個,並且我們的計算機同時可以跑8個線程。
三、CPU時間片輪轉機制
以上我們提到了計算機可以同時跑8個線程,但是在實際在開發中我們好像可以啓動很多個線程,沒有什麼影響。其實是CPU採用了一種時間片輪轉機制。CPU執行一條指令時間是非常短的:0.6ns。因此在我們啓動多個線程執行的時候,CPU會把時間切成很多片給我們不同的線程執行。我們人爲完全沒感覺到。大概理解就是:在1S中,CPU可能調度執行了很多個線程,而我們人爲感覺不到,因此認爲線程是同時執行的。
四、並行和併發的概念
1、並行
並行就是指可以同時運行的任務數。可以理解爲操作系統同時可以運行的線程數。例如以上我們計算機的配置,核心線程數是8,意思就是並行數是8。
2、併發
併發指的是:某個時間內可以執行的任務數。時間片輪轉其實就是一種併發機制。例如我們的並行數雖然是8個,但是由於CPU時間片的輪轉,我們1S內執行了100個線程,那我們就可以理解成我們的1S內的併發是100。
3、併發編程的好處
採用多線程編程的好處:充分利用CPU的資源,加快響應用戶的時間。代碼模塊化,異步化。
需要注意:線程共享進程的資源,併發編程就導致線程搶佔資源。使用鎖,也可能會導致死鎖等等。