一、問題提出
單處理器上只能用序列演算法,所謂的並行也是時間片輪轉,沒有真正達到併發的意義。上下文切換還會有時間消耗,但是我們不可能為每乙個任務都分配乙個cpu,是一種不得已而為之的併發。前面是軟體併發,但是多處理器時代,允許多條指令在處理器上併發執行,討論硬體併發。併發有多程序併發和多執行緒併發,二者各有優缺點,我們討論多執行緒的併發。(多執行緒)多核處理器,面臨分布式儲存和共享儲存的問題。分布式儲存在訪問另乙個處理器儲存時需要傳送一條顯示訊息,效率相比較低一些。分布式儲存致力於解決海量資料的可擴充套件儲存問題,自有其無可替代的應用場景。本文主要介紹共享儲存。
二、多執行緒問題
多處理器和共享儲存的並行計算機有共同特徵:使用靜態執行緒。所謂靜態執行緒就是執行緒池,免去頻繁建立執行緒的麻煩。但是,讓每個執行緒接受大小一致的負載,即負載均衡比較困難。這種情況促使一些併發平台產生,提供一軟體層來協調管理這些並行的資源。
本文介紹「動態多執行緒」一種併發平台,此併發平台包含乙個排程器進行自動進行負載均衡計算。
1、動態多執行緒都有兩個特徵:巢狀並行和並行迴圈。前者可參考斐波那契,允許併發的子過程繼續併發子過程。後者參考矩陣相乘,每一步計算,在乙個執行緒裡可併發的執行。
2、排程: 自動負載均衡計算採用貪心排程器,採用最長處理時間作業優先的貪心策略:(n個作業,m個機器)
當n≤m時, 只要將機器i的[0, ti]時間區間分配給作業i即可。
當n>m時, 將n個作業依其所需的處理時間從大到小排序,然後依次將作業分配給空閒的處理機。
貪心排程器:
三、效能度量
加速比:在p個處理器上比在1個處理器上快多少倍(總工作量/工作時間,工作量是指總的計算量,工作時間是最長執行緒所需要的時間)。加速比最大是處理器的數目,完美線性加速。好的排程演算法就是無限接近完美線性加速,貪心排程器可以達到近完美線性加速。
無限增加處理器沒有意義,現實場景也不可能。一般計算量10倍於處理器以上,可達到好的加速比。
四、並行中的競爭
雖然可以使用互斥鎖,原子操作等執行緒同步方法,最好是讓每個執行緒獨立執行,不存在競爭,但是對於執行緒共享記憶體的特性而言是不可能的,以後部落格會介紹併發程式設計。
多執行緒 多執行緒原理
我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...
多執行緒互斥之Dekker演算法
當併發執行緒競爭使用同乙個資源時,它們互相之間會發生衝突,我們可以把這種情況簡單描述如下 兩個或更多的執行緒在它們的執行過程中需要訪問乙個資源,每個程序並不知道其他執行緒的存在,並且每乙個執行緒也不受其他執行緒的影響。每個執行緒都不影響它所使用的資源的狀態,這類資源包括i o裝置 儲存器 處理器時間...
多執行緒(一) tomcat 多執行緒
web server允許的最大執行緒連線數還受制於作業系統的核心引數設定,通常windows是2000個左右,linux是1000個左右。1.編輯tomcat安裝目錄下的conf目錄下的server.xml檔案 maxthreads 150 表示最多同時處理150個連線,tomcat使用執行緒來處理...