http://www.nimaara.com/2017/07/01/practical-parallelization-with-map-reduce-in-c
它主要是在講怎麼樣快速的統計資料庫中文字出現的頻率。
為了做到加速,它採用了MutliThread的方式。
由於 .net 4 後新增了 PLinq 及Parallel,平行這件事變得更簡單了,但是要如何找出最好的效能,而效能不能好,可以如何觀察是可以從這邊文章學習的地方。
總結來說,這篇文章有趣的地方有
- 介紹了效能分析工具,文中提的有
- dotTrace Profiler,
- Visual Studio Performance Profiling
- ANTS Performance Profiler
- Concurrency Visualizer extension for Visual Studio
- CodeTrack
- PLinq就透過 AsParallel()來呼叫
- PLinq中分資料執行的幾種方式
- Chunk partitioning (動態)
- Range partitioning (靜態)
- Hash partitioning (靜態)
- Striped partitioning
- PLinq在使用時,可以多次呼叫AsParallel,就是平行處理後再平行處理
- PLinq透過Aggregate方法,可以將多個平行在最後時統整成一個
- PLinq中,透過ForAll執行一個方法,在方法中透過有同步處理的資料結構來完成,如ConcurrentDictionary
- 在讀取資料中,透過BlockingCollection來進行同步。再將此集合內的資料AsParallel出去處理
- 不用PLinq改用Parallel去執行
- PLinq和Parallel的設定不同的地方在
- PLinq設計成一開始就要提供指定的Thread來做平行的工作
- Parallel用來在Thread有空閒的時候,才拿這些空閒的Thread來做,否則不拿
沒有留言:
張貼留言