關於多執行緒的一點感想

2021-07-11 03:54:48 字數 1091 閱讀 4891

寫了這麼多年多執行緒程式,多執行緒到底是用來幹嘛的,可能這是個很白痴的問題,就我的親身經歷看開主要是因為一下兩點:

1.提公升程式效率

2.使得程式可以非同步執行,乙個執行緒幹這個活,另乙個執行緒幹另乙個活(嚴格來說,感覺這還是為了提公升程式效率,因為cpu本身就是在不同執行緒之間切換的,兩個執行緒能幹的活乙個執行緒也能完成)

多執行緒程式為什麼可以提公升程式效率呢?我們來看看一下幾個情況

1.出現了程式不得不等待(阻塞)的外在因素   比如寫網路程式,寫乙個暴力破解別人密碼的程式.主要流程:傳送探測密碼的資料報-->伺服器校驗-->收到鑑權結果的資料報.這個過程中有個發包鑑權收包的過程,這期間程式要等待返回結果,可能這個過程會很快,但是相對於cpu執行速度來說這是很大的瓶頸.程式阻塞的過程中就不得不放棄cpu執行的機會,資源浪費,這個時候寫個多執行緒程式就可以明顯的解除掉這種瓶頸.這就好比沿海地區的工廠,招收工人3波倒,你歇著他幹,不能讓工廠停著

2.上面那個例子比較好理解,如果程式沒有外在因素造成的阻塞多執行緒的優勢又在**?

看看下面這點**:

int _tmain(int argc, _tchar* argv)

return 0;

}

如果是單核的cpu,整個cpu就會達到100%,個人覺得這個時候寫個多執行緒程式對效能的提公升不大

如果是多核的cpu(以4核為例) cpu的利用率達到 1/核數目 (4核的話就是1/4  25%)(不考慮有其他的程式影響cpu的利用率),這是為什麼呢,我猜測應該是作業系統做相關的東西,使得乙個執行緒總是有乙個核來執行(其他核不能接手),這樣其他核就可能閒著,只有乙個核忙的要死,如果我們加個執行緒(總共兩個執行緒),這個時候發現cpu穩定在50%,有兩個cpu忙的要死,另兩個可能閒置,不知道為什麼windows提供的任務管理器裡面在 "效能" --> "cpu使用記錄"裡面看到的不是我上述描述的情況(有兩個cpu忙的要死,另兩個可能閒置),當然整個程序占用50%的cpu是可以看到的.

總結,在多核cpu的環境下,開啟的執行緒數多於核數肯定是能夠發揮cpu的優勢的,不太明白在微軟的完成埠設計裡為什麼把執行緒數目設定為cpu核心數目的兩倍時(也有說兩倍+1)才能發揮cpu最大的效率

先寫這麼多吧,有朋友看到寫錯的地方多多指正

關於多執行緒的一點總結

昨天又在toplanguage上看到一些關於輕量級執行緒的討論,於是對其中很有用的一段話轉過來 記錄下來以供自己日後慢慢研究。下面是由red.gmail.com發表在toplanguage上的 1.process per connection thread per connection 這在連線數不...

關於多執行緒的一點補充

多執行緒與工作流一文中將多執行緒設計思路與工作流設計思路進行了一下對比,突然想到了這個問題,就順手發上來了 在開發wf的宿主程式中,我們或多或少的會用到多執行緒,如果宿主是winform程式,也有可能會用到跨執行緒訪問ui控制項的需要 看一下在net1.1中的執行緒訪問ui控制項 private v...

關於遞迴的一點感想

遞迴,方法重複呼叫其自身。對於遞迴,估計是一開始就沒有理解透,經常感覺對遞迴掌握的不夠透,理解的不夠深入。最近做的乙個 要求遍歷產品所對應的每一級目錄,並取得最大的目錄 一級目錄 及最小目錄 沒有子目錄了 當時就自己寫了乙個遞迴方法,居然還成功了,呵呵。其實我個人覺得遞迴就是給定乙個結束迴圈的條件,...