当前位置: 首页 > news >正文

wordpress网站搜索引擎浙江建设职业技术学院官方网站

wordpress网站搜索引擎,浙江建设职业技术学院官方网站,凡客诚品失败的主要原因,凡客诚品为什么不火了本章将介绍并行编程模式#xff0c;重点是理解并行代码问题场景并使用并行编程/异步技术解决他们。本章会介绍几种最重要的编程模式。 本教程学习工程#xff1a;魔术师Dix / HandsOnParallelProgramming GitCode 1、MapReduce 模式 引入 MapReduce 是为了解决处理大数据的问…        本章将介绍并行编程模式重点是理解并行代码问题场景并使用并行编程/异步技术解决他们。本章会介绍几种最重要的编程模式。 本教程学习工程魔术师Dix / HandsOnParallelProgramming · GitCode 1、MapReduce 模式 引入 MapReduce 是为了解决处理大数据的问题例如跨服务器的大规模计算需求。该模式可以在单核计算机上使用。 1.1、映射和归约 MapReduce 程序顾名思义即 Map映射 Reduce归约。MapReduce 程序的输入作为键值对被传递输出也是同样形式。 书上讲的听起来很抽象画张图来辅助理解 输入一个列表然后通过某种方式先进行筛选返回列表然后进行分组返回键值最后返回各个分组的键值对作为结果 1.2、使用 LINQ 实现 MapReduce 其示例中扩展方法如下 public static ParallelQueryTResult MapReduceTSource, TMapped, TKey, TResult(this ParallelQueryTSource source,FuncTSource, IEnumerableTMapped map,FuncTMapped, TKey keySelector,FuncIGroupingTKey, TMapped, IEnumerableTResult reduce){return source.SelectMany(map).GroupBy(keySelector).SelectMany(reduce);} 我们用一个需求来理解这段函数 源数据为 1000 个 -100~100 的随机数 筛选出其中的正数 将其按照10位进行分组0~9一组、10~19一组以此类推 统计每个分组的个数。 那么使用上述 MapReduce 模板进行处理示例代码如下 private void RunMapReduce(){//初始化原始数据int length 1000;Listint L new Listint(length);for (int i 0; i length; i){L.Add(Random.Range(-100, 100));}var ret L.AsParallel().MapReduce(mapPositiveNumbers,//筛选正数groupNumbers,//映射分组reduceNumbers);//归约合并结果foreach (var item in ret){Debug.Log(${item.Key * 10} ~ {(item.Key 1) * 10} 出现了{item.Value} 次 );}}public static IEnumerableint mapPositiveNumbers(int number){IListint PositiveNumbers new Listint();if (number 0)PositiveNumbers.Add(number);return PositiveNumbers;}public static int groupNumbers(int number){return number / 10;}public static IEnumerableKeyValuePairint, int reduceNumbers(IGroupingint, int grouping){return new[]{new KeyValuePairint, int(grouping.Key,grouping.Count())};} 运行结果如下所示 通过上述示例这个映射与归约就容易理解多了实际上就是某一种特定的业务模板写法筛选 → 分组 → 合并。在并行编程中类似这样的写法都可以通过同样的模板代码实现。 2、聚合 聚合Aggregation是并行应用程序中使用的另一种常见的设计模式。在并行程序中数据被划分为多个单元以便可以通过多个线程在内核之间进行处理。在某个时候需要将所有相关来源数据组合起来然后才能呈现给用户。 书上的例子只讨论了使用 PLINQ 代码的示例我们也照着写一个 private void RunAggregation(){var L Utils.GetOrderList(10);var L2 L.AsParallel().Select(TestFunction.IntToString)//并行处理.ToList();//合并foreach (var item in L2)Debug.Log(item);}public static string IntToString(int x){return $ToString_{x};} 上述代码运行结果如下 可以看到这个运行模式是保证顺序的源数据是List。 一般来讲我们为了避免锁、同步等额外处理要么使用 PLINQ 这样的语法要么使用并发集合。这样可以减少我们需要手动处理锁、同步等工作。 3、分叉/合并模式 在分叉/合并Fork/Join模式中工作被分叉拆分为一组可以异步执行的任务然后根据并行化的要求和范围以相同或不同的顺序合并分叉的任务。 分叉/合并模式常见的一些实现如下 Parallel.For Parallel.ForEach Paralle.Invoke System.Threading.CountdownEvent 利用这些同步框架开发人员能快速实现开发而不必担心同步开销系统已经内部处理同步了实际上如如果额外开销不可接受用这些 API 也没办法优化。 我们将之前的代码通过 分叉/合并模式 再改一版 private void RunForkJoin(){var L Utils.GetOrderList(10);ConcurrentQueuestring queue new ConcurrentQueuestring();Parallel.For(0, L.Count, x {var ret IntToString(x);queue.Enqueue(ret);});while (queue.Count 0){string str;if (queue.TryDequeue(out str))Debug.Log(str);}} 这次我们看运行结果 很显然已经乱序了这种模式就没有按照原来数据顺序进行数据处理。这也是这个模式的特点之一我们可以选择是否要按照顺序进行合并。 4、推测处理模式 推测处理模式Speculative Processing Pattern是依赖高吞吐量以减少等待时间的另一种并行编程模式。 推测处理模式Speculative Processing Pattern 如果同时存在多种处理任务但并不知道哪一种方式速度最快。因此第一个执行的完成的任务将被输出其他任务处理结果将会忽略。 以下是一种推测处理模式的常见写法 //选择一个最快执行方法的结果并返回public static TResut SpeculativeForEachTSource, TResut(TSource source, IEnumerableFuncTSource, TResut funcs){TResut result default;Parallel.ForEach(funcs, (func, loopState) {result func(source);loopState.Stop();});return result;}//返回特定方法的最快执行结果并返回public static TResut SpeculativeForEachTSource, TResut(IEnumerableTSource source, FuncTSource, TResut func){TResut result default;Parallel.ForEach(source, (item, loopState) {result func(item);loopState.Stop();});return result;} 这种写法只会返回一个结果首先完成的任务将被返回。但是其他任务仍然有可能执行完成只是结果将不会被返回。 这里我们选择方法一进行示例调用代码如下 private void RunSpeculativeMethod_1(){Debug.Log($ RunSpeculativeMethod_1 开始 );var L1 new ListFuncint, string{IntToString,IntToString2};string result SpeculativeForEach(4, L1);Debug.Log($运行结果{result});} 连续运行2次其结果如下 第一次是使用了 IntToString2 的结果而第二次使用的 IntToString 的结果。 5、延迟模式 也就是在使用时才创建也就是懒加载。这个在之前的章节中已经有详细介绍了这里就不重复了。 详见使用延迟初始化提高性能 【C#】并行编程实战使用延迟初始化提高性能_魔术师Dix的博客-CSDN博客在前面的章节中讨论了 C# 中线程安全并发集合有助于提高代码性能、降低同步开销。本章将讨论更多有助于提高性能的概念包括使用自定义实现的内置构造。本章主要内容为通过延迟初始化提高性能相对比较简单。https://blog.csdn.net/cyf649669121/article/details/131780600 6、共享状态模式 这个主要在 【C#】并行编程实战同步原语1_魔术师Dix的博客-CSDN博客 中已经介绍过共享状态Shared State Pattern的实现其实就是各种加锁搞的好像很高级。 不过上锁不能上太多不然性能很差而且我们也应该尽可能实现无锁代码。 7、本章小结 本章介绍了各种并行编程模式其实就是各种模板的示例。当然这里讲的不可能包罗所有只是给大家提供一些参考。至此多线程编程的学习告一段落书上的内容已经讲完了。后续如果有补充会加到这个系列里。 多线程的实践还是需要在项目中多多练习。 本教程学习工程魔术师Dix / HandsOnParallelProgramming · GitCode
http://www.w-s-a.com/news/706405/

相关文章:

  • 网站建设婚恋交友聊城网站建设费用
  • 沈阳网站建设联系方式尉氏县金星网架公司
  • 医院网站建设实施方案基础微网站开发信息
  • 网站建设开发服务费记账百度指数搜索
  • 网站建设备案流程windows优化大师有必要安装吗
  • 怎么网站定制自己做网站卖视频
  • 网站开发二线城市网站制作过程中碰到的问题
  • 最好网站建设公司制作平台小程序开发教程资料
  • 陕西省高速建设集团公司网站国内做会展比较好的公司
  • 建设学校网站的原因网页设计实训报告1500
  • 网站建设客户来源江门网站设计华企立方
  • 自己如何做棋牌网站宁波网络推广优化方案
  • 深圳招聘网站推荐seo网站推广方案
  • 彩票网站开发 合法学术会议网站建设
  • 商务网站建设论文答辩pptseo技术博客
  • 怎样才能有自己的网站桂林搭建公司
  • 哪个网站做视频赚钱万科
  • 莆系医疗网站建设wp如何做网站地图
  • 网站建设应急处置方案团购网站 备案问题
  • 网站建设 岗位职责浙江中天建设集团有限公司网站
  • 西海岸建设局网站用wordpress建站学什么
  • 网站静态和动态学校网站建设流程步骤
  • 做群头像的网站在线怎么做俄语网站
  • 西安网站定制开发国内cms推荐
  • windows网站建设教程视频教程wordpress默认用户头像
  • 做网站需要什么软件wordpress会员邮件通知
  • 技术支持网站合肥网站搭建
  • 无为网站设计免费制作企业网站平台
  • 社交网站第一步怎么做房屋装修效果图用什么软件
  • 企业网站 批量备案合肥 网站建设