没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2009-08-19 11:41:42.000|阅读 409 次
概述:F#是微软推出的一套函数式编程语言,能在CLR中运行,且和.NET其它语言能很好的交互,又因为它对并发编程的特殊支持,比如不变对象,异步表达式,新的并行基元等,所以很值得入门学习一下。现在我们综合应用这些技术写一个并行排序算法,并对其进行性能测试。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
摘要:F#是微软推出的一套函数式编程语言,能在CLR中运行,且和.NET其它语言能很好的交互,又因为它对并发编程的特殊支持,比如不变对象,异步表达式,新的并行基元等,所以很值得入门学习一下。现在我们综合应用这些技术写一个并行排序算法,并对其进行性能测试。
思路:并行算法中其中有一种比较常见的方法就是先把要处理的数据分成若干份,然后让不同的线程(CPU)去处理,然后所有的线程处理完成后,把结果汇聚在一起,在一个独立的线程里完成结果合并,从而形成最终结果。在做分割的时候尽量让每个线程只访问自己独立的数据,而不访问全局数据和其它线程的数据(这里说的数据是非只读数据),在合并结果的时候要有一种高效的算法来合并。
排序算法里有归并排序算法,我们先写一个多路归并排序算法,然后把要排序的数组分成CPU的个数份,让每个CPU去对每一份进行排序,所有线程排序完成后汇聚在一起,在一个独立的线程里进行归并排序。
大概再解释一下代码,可能有些人对f#还不熟悉。
1、归并算法的思路就是把多个已经排序的数组合并成一个大的排序数组,先从每个分数组的最小下标开始,谁都最小就放到大数组里,然后这个数组的下标加一,然后再比较,再把最小的放到大数组里,重复,直到所有的小数组的下标已经指向到末尾。其中会用到一个临时变量min,所以用mutable关键字修饰。
2、F#的数组的长度用Array.length方法得出,变量和数组的赋值符号是<-,而不是=,=相当于c#里的==,f#里没有continue和break等关键字
3、async关键字是一个新的并行基元,用它扩住的代码由f#自动的异步在线程池里执行,如果里面要返回结果的话,要用let!和return!关键字,我们的排序只是对数组进行操作,并不返回,所以这里比较简单。
4、(fun a b -> a - b)是一个lamda表达式,它可以自动转换成Comparer<T>,起到排序依据的作用
5、Array.map表示把一个数组里的每个元素应用一个方法,它这时候不执行,会通过管道传递给Async.Parallel方法,Async.Parallel方法返回一个异步执行数组Async<'a array>,最后用Async.Run来真正执行Async.Parallel返回的结果。
6、|>表示管道的意思,大致就是把前一个函数的结果让后一个函数来用,这样一条语句可以表达很连贯的逻辑。
整体代码如下:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号