2018年10月18日 星期四

統計文字方法 心得

在網路上看到這篇文章
http://www.nimaara.com/2017/07/01/practical-parallelization-with-map-reduce-in-c
它主要是在講怎麼樣快速的統計資料庫中文字出現的頻率。
為了做到加速,它採用了MutliThread的方式。
由於 .net 4 後新增了 PLinq 及Parallel,平行這件事變得更簡單了,但是要如何找出最好的效能,而效能不能好,可以如何觀察是可以從這邊文章學習的地方。
總結來說,這篇文章有趣的地方有

  1. 介紹了效能分析工具,文中提的有 
    1. dotTrace Profiler, 
    2. Visual Studio Performance Profiling
    3. ANTS Performance Profiler
    4. Concurrency Visualizer extension for Visual Studio
    5. CodeTrack
  2. PLinq就透過 AsParallel()來呼叫
  3. PLinq中分資料執行的幾種方式
    1. Chunk partitioning (動態)
    2. Range partitioning (靜態)
    3. Hash partitioning (靜態)
    4. Striped partitioning
  4. PLinq在使用時,可以多次呼叫AsParallel,就是平行處理後再平行處理
  5. PLinq透過Aggregate方法,可以將多個平行在最後時統整成一個
  6. PLinq中,透過ForAll執行一個方法,在方法中透過有同步處理的資料結構來完成,如ConcurrentDictionary
  7. 在讀取資料中,透過BlockingCollection來進行同步。再將此集合內的資料AsParallel出去處理
  8. 不用PLinq改用Parallel去執行
  9. PLinq和Parallel的設定不同的地方在
    1. PLinq設計成一開始就要提供指定的Thread來做平行的工作
    2. Parallel用來在Thread有空閒的時候,才拿這些空閒的Thread來做,否則不拿

沒有留言:

張貼留言