一:多執行緒的一些解釋(來至知乎),我覺得解釋的比較好,比較詳細,就給大家分享一下
1、單程序單執行緒:乙個人在一張桌子上吃菜
2、單程序多執行緒:多個人在同一張桌子上吃菜
3、多程序單執行緒:多個人每個人在自己的桌子上吃菜
多執行緒的問題就是多個人在同一張桌子上吃同一道菜時會發生爭搶,如果兩個人同時夾一道菜,乙個人剛伸出筷子,結果菜已經被另乙個人夾走了,這樣,就會等乙個人夾一口後,在換另乙個人來夾菜,也就是說資源共享會發生衝突爭搶。
對於 windows 系統來說,【開桌子】的開銷很大,因此 windows 鼓勵大家在乙個桌子上吃菜。因此 windows 多執行緒學習重點是要大量面對資源爭搶與同步方面的問題。
2對於 linux 系統來說,【開桌子】的開銷很小,因此 linux 鼓勵大家盡量每個人都開自己的桌子吃菜。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便。因此,linux 下的學習重點大家要學習程序間通訊的方法。
二、下面我們來乙個例項對比一下使用多執行緒和使用傳統方法
1、背景
京東**官網發布公告稱,「『618』活動異常火爆且使用者下單速度空前,致使部分使用者已購訂單顯示出現延遲,使用者在一段時間內無法在『我的京東』中查詢到自己的訂單。目前已購訂單顯示延遲的問題已得到有效解決,對此給您帶來的不便,我們深表歉意。」
2、例項
我們來模擬處理訂單。假設程式後台有個monitor實時監控訂單,如果發現訂單就提交,然後處理訂單,需要向倉庫系統發出指令,負責配送發貨。下面我們來模擬這個場景
定義乙個訂單幫助類
public class jobhelper
/// /// 提交訂單,假設每秒處理乙個訂單
///
///
///
public bool submitjob(int jobid)
}
program類:
class program
//for (int i = 1; i <= ordercount; i++)
////datetime complete = datetime.now.tolocaltime();
//var minutes = (complete - starttime).totalseconds;
"處理個訂單,花費時間秒", ordercount, minutes));
#endregion
#region 多執行緒task方法
datetime starttime = datetime.now.tolocaltime();
int ordercount = jobhelper.getjobcount();
// 用乙個指示呼叫執行緒是否應擁有互斥體的初始所屬權的布林值來初始化 mutex 類的新例項。
// 當前程序只能啟動一次
mutex = new mutex(false, "threaddemo");
if (!mutex.waitone(0, false))
var tasklist = new list();
for (int i = 1; i <= ordercount; i++)
));}
task.waitall(tasklist.toarray());
datetime completetime = datetime.now.tolocaltime();
var minutes = (completetime - starttime).totalseconds;
console.writeline(string.format("處理個訂單,花費時間秒", ordercount, minutes));
console.readkey();
#endregion}}
結果:傳統方法:
多執行緒task方法:
所以多執行緒的意思就是多個執行緒一起去協同完成乙個任務,通過充分去共享資源來達到提公升效率的一種程式設計思想
為什麼要使用執行緒池?
專案中一直在使用執行緒池,平時卻很少問自己 為什麼要使用執行緒池,當別人問起為什麼的時候,腦子一片茫然。所以最近研究了一下為什麼?順便摘錄了一些的回答 1.乙個執行緒的週期分為 建立 執行 銷毀三個階段。處理乙個任務時,首先建立乙個任務執行緒,然後執行任務,完了,銷毀執行緒。而執行緒處於執行狀態的時...
為什麼要使用執行緒池
諸如web伺服器,資料庫伺服器,檔案伺服器或者郵件伺服器之類的許多伺服器應用程式都面向處理來自某些遠端 短小的任務。請求以某種方式到達伺服器,這種方式可能是通過網路協議 例如http,ftp 通過jms佇列或者可能通過輪詢資料庫。不管請求如何到達,伺服器應用程式經常出現的情況是 單個任務處理的時間很...
為什麼使用多執行緒
1 耗時的操作使用執行緒,提高應用程式響應 2 並行操作時使用執行緒,如c s架構的伺服器端併發執行緒響應使用者的請求。3 多cpu系統中,使用執行緒提高cpu利用率 4 改善程式結構。乙個既長又複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨 立的執行部分,這樣的程式會利於理解和修改。使用多執...