由 Parallel.For 看多執行緒程式設計
由 Parallel.For 看多執行緒程式設計
.NET / C# 平行程式設計系列
關於本書
關於本書
某日在網路上爬文, 看到了臉書社團 這個[網址](https://bit.ly/3mNMSNJ) 中有許多人正在熱烈的討論關於如何使用 Parallel.For 這個方法來做到平行執行一萬次 Thread.Sleep(5000) 需求。 這是一個很有趣的題目,然而卻看到大家在這個串列中盡情的抒發自己的意見,表達各種看法,但是卻沒有人可以正確地說明如何做到提問者想要解決的問題, 計算機科學領域沒有這麼模寧兩可與複雜,只要有者正確的觀念與技巧, 都可以解釋當時發生了什麼問題,以及使用正確的方法來解決這些問題,然而,卻沒有透過這些討論內容來得到任何技能與知識提升的效果。
很早以前就想要寫本關於 .NET / C# 平行程式設計 方面的書籍,不過這方面的內容相當的多與繁雜,但是,已經針對這些內容整理與設計出四個階段的教育訓練課程與超過上百個講解與練習範例專案專案,因此,就逐一根據這個討論串列中各個人所提出的講法,設計不同的範例程式碼,而我只是想單純的想做個簡單的學術研究,並且將這些範例程式碼設計彙整成為一份教學課程簡報。
原本只是想針對 Parallel.For 這個題目設計一個簡單的快閃課程,有機會與大家一起來分享這些知識,但是在設計教學簡報的過程中,發現到有許多基礎的知識要能夠交代,才能夠順利解決某些問題,導致於簡報內容設計的越來越多,因此想說索性把這些過程與內容寫成一本書吧。
在此因緣際會下,開始了 .NET / C# 平行程式設計系列 的第一本書 由 Parallel.For 看多執行緒程式設計,在這本書裡面,將會提供 6 章節,將會討論到底下主題
- 我只是想做個簡單的學術研究針對該討論串列內容與主要關鍵核心技術先行說明一番
- 了解 Parallel.For 執行順序首先,先來了解 Parallel.For 是什麼,是要設計解決什麼問題
- Parallel.For 平行迴圈程式設計的指定平行工作數目上限特性理解平行度,也就是在進行平行資料處理,原則上會把這些資料集和切割成不同區塊,交由不同的執行緒來執行緒
- 使用Parallel.For做到一萬次迴圈,實際需要花多少時間將問題提問者提出的測試程式碼跑一次,就會知道提問者想要解決什麼問題了
- 重現造成記憶體不足情況當提到記憶體不足,究竟說的是哪一個?Memory Overflow / Stack Overflow ,而造成的原因是什麼?
- Parallel.For 同時執行 10000 次迴圈,觀察用了多少執行緒雖說 Parallel.For 可以提供資料平行處理能力,但是,究竟產生了多少執行緒來做到平行執行呢?
- Parallel.For同時執行 200 次要花多久時間與用到多少執行緒Parallel.For 平行迴圈一萬次僅用到 235 執行緒,那麼,若僅平行迴圈 200 次,會不會5秒就執行完畢
- 透過執行緒集區(預設參數)取得過多執行緒的使用情況了解執行緒集區的預設執行方式
- 透過執行緒集區(修正參數)取得過多執行緒的使用情況設定執行緒集區預設準備 500 個執行緒,看看執行結果
- 使用 new Thread 來自行產生 10000 個執行緒來使用大家都說執行使用執行緒,效能會很好,那麼就來產生 10000 個執行緒來看看表現
- 了解同時使用 10000 個執行緒,這些執行緒開始執行時候,會造成多少延遲時間因為直接產生 10000 個執行緒效能表現不佳,了解問題在哪裡
- Parallel.For 透過執行緒集區準備10000個執行緒的結果設定執行緒集區預設準備 10000 個執行緒,執行 Parallel.For 一萬次,看看執行結果
- Parallel.For 透過執行緒集區準備不同執行緒數量的32位元執行結果在 32 位元下,若產生過多執行緒,會有記憶體不足問題產生
- 聽說 Task 很厲害,那就使用 10000 個Tasks絕大部分的人都對 Task 與 Thread 有所誤解,在此建 10000 個 Task 來看看表現
- 用 Task.Factory.StartNew 建立 10000 個Tasks使用每個 Task 都是自己生成的執行緒,不透過預設工作排程器來取得執行緒,看看表現
- 使用 Task.Delay 來取代 Thread.Sleep 的封鎖 Block 等待使用非封鎖的等待方式來體驗好的設計方法有什麼不同
- Parallel.For 改成使用 Task.Delay最後,了解如何做到資料平行 10000 次處理,最終真的僅需要 5 秒就可以執行完畢的方法
誰適合閱讀這本書
- 對於任何想要學習 .NET / C# 平行程式設計 這個技術的開發者
- 需要具有 .NET / C# 開發經驗者,畢竟這本書中的例子是使用 C# 解說
- 最好能夠具備基本的計算機概念與知識
目錄
-
關於本書
- 誰適合閱讀這本書
- 練習專案原始碼
-
1. 我只是想做個簡單的學術研究
- 1.1 了解 Parallel.For 執行順序
- 1.2 Parallel.For 平行迴圈程式設計的指定平行工作數目上限特性
-
2. 有人提出問一個 Parallel.For 問題
- 2.1 執行結果分析
- 2.2 Parallel.For 是如何使用執行緒
- 2.3 重現造成記憶體不足情況
- 2.4 Memory Overflow 造成的原因
- 2.5 Stack Overflow 造成的原因
-
3. Parallel.For 同時執行 10000 次,觀察用了多少執行緒
- 3.1 Parallel.For同時執行 200 次要花多久時間與用到多少執行緒
- 3.2 透過執行緒集區(預設參數)取得過多執行緒的使用情況
- 3.3 透過執行緒集區(修正參數)取得過多執行緒的使用情況
-
4. 使用 new Thread 來自行產生 10000 個執行緒來使用
- 4.1 了解同時使用 10000 個執行緒,這些執行緒開始執行時候,會造成多少延遲時間
- 4.2 Parallel.For 透過執行緒集區準備10000個執行緒的結果
- 4.3 Parallel.For 透過執行緒集區準備不同執行緒數量的32位元執行結果
-
5. 聽說 Task 很厲害,那就使用 10000 個Tasks
- 5.1 用Task.Factory.StartNew 建立 10000 個Tasks
-
6. 使用 Task.Delay 來取代 Thread.Sleep 的封鎖 Block 等待
- 6.1 Parallel.For 改成使用 Task.Delay
- 6.2 修正 Parallel.For 使用 Task.Delay 造成的錯誤
- 6.3 確認使用到多少的工作與執行緒
- 版權頁
Leanpub 100% 無風險的滿意保證
在付款後的 60 天內,只要點擊兩下,你就可以退書並獲得全額退款。退書是手工操作的,所以可能需要幾天時間來完成整個過程。
查看完整條款.
在$10的購買中賺$8,在$20的購買中賺$16
我們在$7.99或以上的購買中支付80%的版稅,並在$0.99至$7.98的購買中支付80%的版稅減去50美分的固定費用。在$10的銷售中賺$8,在$20的銷售中賺$16。因此,如果我們以$20銷售5000本未退款的書,您將賺取$80,000。
(是的,一些作者已經在Leanpub上賺了很多錢。)
實際上,作者在Leanpub上賺取了超過1300萬美元通過寫作、出版和銷售。
了解更多關於Leanpub寫作的信息
免費更新。無 DRM 限制。
如果你購買了 Leanpub 的書,只要作者更新書籍,你就可以獲得免費更新!許多作者使用 Leanpub 來發布他們正在編寫的書籍。所有讀者都可以獲得免費更新,無論他們何時購買書籍或支付了多少費用(包括免費)。
大多數 Leanpub 書籍均提供 PDF(適用於電腦)、EPUB(適用於手機和平板電腦)和 MOBI(適用於 Kindle)格式。書籍包含的格式將顯示在此頁面的右上角。
最後,Leanpub 書籍沒有任何 DRM 複製保護的胡說,因此你可以輕鬆地在任何支持的設備上閱讀它們。