天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Silverlight 的多線程能力(下)

  上一期筆者介紹了Silverlight實現多線程的諸多解決方案,本期筆者將通過一個實例來實現所有多線程編程方法,并且還將于JavaScript和Flash兩種Web客戶端技術性能進行比較,請勿拍磚。

  在正式編程前,筆者還要重申上期非常重要的觀點:Silverlight多線程主要作用不是在于提高性能,而是在于用戶體驗。這里要給多線程潑一盆冷水了,多線程與性能提升不是正比關系,如果你使用一個單核CPU的客戶端設備,那么即便你創建100個多線程也與單線程的計算性能是一樣的,因為一個CPU時間片下只能處理一個線程,多線程也必須串行處理,甚至還可能因為過多的CPU調度開銷而導致性能不及單線程的情況。當然在多核的情況下多線程可以負載到多個CPU上并行執行而提升性能,經過筆者在項目實施前的技術研究中發現如果客戶端有N核的情況下,Silverlight多線程可以被N個CPU時間片平分,而CLR將同時讓N+1個線程處于Ready狀態,經過反復測試多線程性能是單線程的近N倍。其實客戶端已經呈現多核趨勢,就在不久前發布了PSP的下一代產品NGP采用ARM 4核處理器,而iPad2采用A5雙核處理器,而我們現在用的筆記本與臺式機基本都是超過2核的處理器,所以多線程的計算能力還是很有前景的。

  下面我們就一起來看看實例,這個實例筆者選擇了比較容易懂的素數計數函數(Prime-counting function)作為實例,用數學專業術語來說就是π(x),有沒有搞錯怎么和圓周率有關?這里不是圓周率而是π函數,是一個用來表示小于或等于某個實數x的素數的個數的函數。比如π(10)=4,因為不大于10的素數有2,3,5,7共計4個。對于π(x)的確定性算法筆者準備了兩種:

  1. 試除法
  2. 具體方法是從3開始對所有不大于x的奇數進行素數判斷。當判斷i是否為素數時,通過從3開始到i的平方根(i=m*n中必然有一個因子小于i的平方根)的所有奇數進行試除,如果i能被整除則i不是素數,否則i是素數。該算法最易理解,而且可以并行試除,并行試除法的思路是按照2k*m+n的同余類進行分組,如果有k個并行組,那么對于從3開始對所有不大于x的奇數可以用{2k*m+1,2k*m+3,…,2k*m+2k-1}共k個同余組來分別進行試除,最后π(x)等于所有分組素數求和。

  3. 埃拉托斯特尼篩法
  4. 埃拉托斯特尼篩法,簡稱埃氏篩或愛氏篩,是一種由古希臘數學家埃拉托斯特尼所提出的一種簡單檢定素數的算法,該算法的思路從第一個素數開始,按照素數的倍數都是合數的思路,全部篩去,然后再篩去第二個素數的倍數,一直到當前素數大于x的平方根時結束,所得到沒有篩去的數都是素數。該算法是已知確定性算法中時間復雜度最低的算法,但缺點是不能并行(至少筆者目前還沒有找到并行篩法,如果你找到了請與筆者聯系)。

  在本案例中筆者使用試除法進行多線程計算,并通過篩法來校驗計算的正確性。下面我們首先實現Silverlight的兩個算法類:

  1. 試除類PrimeFinder
  2. 該類主要負責對并行算法的支持,其中MaxPrime屬性用來記錄最大素數,PrimeCount屬性記錄素數個數,Stat屬性的類型為枚舉類WorkerStat { Init, Working, Worked },用以監視線程的工作狀態。OnFindComplete事件用于通知UI線程查找完成。其中主要函數實現如下:

    publicvoid FindPrime() 
    {
      _primeCount
    = 0;
      _stat
    = WorkerStat.Working;

    for (uint i = _startNum; i <= _maxNam; i += _step)
    {
      if (IsPrime(i))
      {
        _primeCount
    ++;
        _maxPrime
    = i;
      }
    }
      _stat
    = WorkerStat.Worked;

      //通知完成查找
      InvokeFindComplete(EventArgs.Empty);
    }

    privatebool IsPrime(
    uint x)
    {
      if (x == 1u) returnfalse;
      uint sqrtx = (uint)(Math.Sqrt(x));
      for (uint i = 3u; i <= sqrtx; i += 2u)
      {
        if (x % i == 0) returnfalse;
      }
      return true;
    }

    NET技術Silverlight 的多線程能力(下),轉載需保留來源!

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本夜夜夜 | 久久国产欧美日韩精品免费 | 午夜男女爽爽羞羞影院在线观看 | 含羞草完整视频在线播放免费 | 女人的选择hd | 精品无码久久久久久久久 | 在线观看永久免费网站 | 亚洲AV 日韩 国产 有码 | 好满射太多了装不下了视频 | 亚洲国产精品嫩草影院久久 | 99久久久无码国产精品免费人妻 | 亚洲AV无码专区国产乱码网站 | 少妇精品无码一区二区三区 | 国模孕妇模特季玥之粉红 | 插我一区二区在线观看 | 黄 色 网 站 免 费 涩涩屋 | 午夜影院老司机 | av56788成 人影院 | 青青久在线| 亚洲精品无码国产爽快A片百度 | 国产精品成人影院 | 日本三级黄色大片 | 国产69精品久久久久乱码 | 少妇内射视频播放舔大片 | 精品无人区麻豆乱码无限制 | 国产曰批试看免费视频播放免费 | 亚洲日韩国产精品乱-久 | 亚洲欧美中文日韩视频 | 国产 高清 无码 在线播放 | 国产午夜精品久久理论片 | 久久婷婷色香五月综合激情 | 国产精品www视频免费看 | 国产乱妇乱子在线播视频播放网站 | 天堂Av亚洲欧美日韩国产综合 | 精品美女国产互换人妻 | 国产九色在线 | 久久夜色噜噜噜亚洲AV0000 | WRITEAS塞红酒瓶 | 久久伊人影视 | 国产欧美无码亚洲毛片 | 欲插爽乱浪伦骨 |