多線程基礎概述(一)

計算機cpu,核心數,線程數之間的關係

CPU:物理上真實存在,是一塊芯片,相當於人體的大腦,是計算機處理邏輯的中樞
核心數:物理上不存在,邏輯上存在,一塊cpu可以分成多個核心數,一個核心數相當於一個人體的大腦,即核心相當於邏輯上的cpu
線程數:邏輯上存在,在同一時刻,允許同時處理事情的件數,相當於人腦的一心多用

原來的核心數與線程數的比例爲1:1,但是隨着超線程技術的興起,現在技術可以實現1:2的關係,即一個核心能同時處理2件事情,現在能理解雙核4線程的含義了吧。再補充一句,計算機上可以有多個CPU芯片。

計算機線程數和java線程數的關係

計算機多線程和java線程沒什麼直接的關係,例如,當計算機爲雙核4線程時,java同時開啓了5個線程該怎麼執行,這就涉及到了cpu的執行算法:時間輪詢算法(下面會具體概述)。即同一時刻計算機爲4線程,則能同時處理java中4個線程任務,而最後一個線程則處於等待狀態,等待某一線程執行結束且cpu分配執行權給該java線程後,才能處理該線程

時間片輪轉調度算法

時間片輪轉調度算法是一種最簡單,最古老,最公平且使用最廣泛的算法。每個進程被分配一時間段,稱作它的時間片,即該進程允許運行的時間。其實現的基本原理是:計算機將所有就緒的進程按照先來先服務(先進先出)的原則,排成一個隊列,每次調度時,把cpu執行權分配給隊首進程,並令其執行一個時間片,時間片的大小從幾毫秒到幾百毫秒,當時間片的時間用完時,由一個計時器發出中斷請求,該進程將被剝奪執行權,並將其送往就緒隊列的末尾;然後,再將cpu執行權分配給就緒進程隊列的新的隊首進程,重複上面的執行流程,這樣的算法能保證就緒隊列中所有進程在一給定的時間內,都能獲取cpu的執行權。

補充
在cpu給定進程的執行權後,進程會將執行權給予該進程中就緒線程隊列的隊首線程,若在時間片的時間用完時,該線程也將送往就緒線程隊列的末尾。

進程和線程

  • 進程:程序運行資源分配最小單位,進程內部有多個線程,多個線程間共享
    這個進程資源,如QQ,天貓網站等都是一個獨立的進程
  • 線程:cpu調度的最小單位,必須依賴於進程存在

並行與併發

  • 並行:同一時刻,可以處理事情的能力
  • 併發:與單位時間相關,在單位時間內能處理事情的能力,如併發量爲每秒一千次點擊,說明該系統操作能在1秒內同時處理一千次請求

併發編程的優缺點

  • 優點:

能充分利用cpu資源,加快用戶的響應時間

  • 缺點

線程中的利用共享資源時,容易造成衝突
容易造成死鎖
線程啓動過多,上下文切有可能造成資源更大的浪費

發佈了41 篇原創文章 · 獲贊 24 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章