并行中的分区Partitioner

本篇介绍在C#中,把一个大集合,或大数组分成若干个区来执行。Demo中是把一组字符串放在list中,然后并行生成MD5串,返回回来。

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks;
using System.Linq;
using System.Collections.Concurrent;public class Program
{public static async Task Main(string[] args){await PartitionerDemoAsync();}public static string ToMD5Hash(string str){if (string.IsNullOrEmpty(str)){return null;}var bytes = Encoding.ASCII.GetBytes(str);if (bytes == null || bytes.Length == 0){return null;}using (var md5 = MD5.Create()){return string.Join("", md5.ComputeHash(bytes).Select(x => x.ToString("X2")));}}static async Task<List<string>> PartitionA(IEnumerator<string> partition){using (partition){var list = new List<string>();while (partition.MoveNext()){list.Add(ToMD5Hash(partition.Current));}Console.WriteLine($"======={list.Count}========");return await Task.FromResult(list);}}static async Task PartitionerDemoAsync(){while (true){Console.ReadLine();var source = new List<string>();for (var i = 0; i < 80000; i++){source.Add($"{i}{DateTime.Now.ToString("yyyyMMddHHmmssfffffff")}");}var list = Partitioner.Create(source).GetPartitions(12).AsParallel().Select(PartitionA);var count = 0;foreach (var item in list){count++;foreach (var t in await item){Console.WriteLine($"---{count}---{t}-----");}}}}
}

我电脑是配置是8核。

这是把区分成8个后,80000个元素,三次分配的结果。元素越多,相对分配置比较均匀。

当把分区设置成12时,会发现三次分区中,总是有四个分不到的,说明.GetPartitions(12)会查看本机的cpu核心数,把分区的上限限制在核心数上,可以少于等于这个值,可以理解,多了没有cpu去运算,也没有意义了。

最后,用Benchmark跑一下用分区的和不分区的状态下生成80000个md5结果:

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;namespace Demo01
{public class ParallelDemo2 : IDemo{public void Run(){BenchmarkRunner.Run<TestParallelDemo2>();}}public class TestParallelDemo2{[Benchmark]public void DemoAsync(){var list = new List<string>();for (var i = 0; i < 80000; i++){list.Add(ToMD5Hash($"{i}{DateTime.Now.ToString("yyyyMMddHHmmssfffffff")}"));}foreach (var item in list){// Console.WriteLine($"-----{item}-----");}}[Benchmark]public async Task PartitionerDemoAsync(){var source = new List<string>();for (var i = 0; i < 80000; i++){source.Add($"{i}{DateTime.Now.ToString("yyyyMMddHHmmssfffffff")}");}var list = Partitioner.Create(source).GetPartitions(12).AsParallel().Select(PartitionA);foreach (var item in list){foreach (var t in await item){// Console.WriteLine($"-----{t}-----");}}}string ToMD5Hash(string str){if (string.IsNullOrEmpty(str)){return null;}var bytes = Encoding.ASCII.GetBytes(str);if (bytes == null || bytes.Length == 0){return null;}using (var md5 = MD5.Create()){return string.Join("", md5.ComputeHash(bytes).Select(x => x.ToString("X2")));}}async Task<List<string>> PartitionA(IEnumerator<string> partition){using (partition){var list = new List<string>();while (partition.MoveNext()){list.Add(ToMD5Hash(partition.Current));}//Console.WriteLine($"======={list.Count}========");return await Task.FromResult(list);}}}
}

分区明显要优于普通方式,数据越多,优势越明显。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搞笑诺贝尔颁出,中国科学家入选!阿蟑有磁性、睾丸热不对称,10大奇葩研究来了...

全世界只有3.14 % 的人关注了青少年数学之旅Laugh and think&#xff0c;科学的另一面&#xff0c;就是有趣&#xff01;——在今天的哈佛大学桑德斯剧场&#xff0c;一群科学家身体力行地证明了这件事&#xff0c;在诺贝尔奖颁出前夕&#xff0c;率先发布了今年的“搞笑诺贝尔…

C++中的对象数组

类是对象的抽象&#xff0c;我们可以使用一个类来定义很多的对象&#xff0c;然后每个对象都有自己的属性。 当我们使用类来定义很多相同结构的对象的时候&#xff0c;我们可以采取对象数组的方法。 例如&#xff0c;一个班有50个学生&#xff0c;我们定义了一个学生类&#xf…

周杰伦新歌《说好不哭》彩蛋大汇总! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅一首单曲&#xff0c;就霸占了一半的微博热搜榜&#xff0c;除了周杰伦&#xff0c;估计也没别人能做得到了。回想起前段时间&#xff0c;周杰伦的中老年粉丝与ikun们围绕着“顶级流量”展开的那场battle...说实话&#xff0c;那场 b…

AI日报:2024年人工智能对各行业初创企业的影响

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 文章目录 2024年人工智能对初创企业的影响具体行业医疗金融服务运输与物流等 新趋势 2024年人工智能对初创企业的影响 2023年见证了人工智能在各个行业的快速采用和创新。随着我们步入2024年&#xff0c;人工智能初创公司正…

Ant Design Blazor 组件库的路由复用多标签页介绍

前言Blazor 是 .NET 最新的前端框架&#xff0c;可以基于 WebAssembly 或 SignalR &#xff08;WebSocket&#xff09;构建前端应用程序&#xff0c;基于 WebAssembly 托管模型的 Blazor 甚至可以离线运行。再加上可以共用 .NET 类库&#xff0c;能使代码量比以往的基于 JS 的前…

AI 竟然通过了初中生考试!?这意味着什么?

全世界只有3.14 % 的人关注了青少年数学之旅2016 年 AlphaGo 战胜世界棋王李世石&#xff0c;被认为是人工智能一个重要的里程碑。此后 AlphaGo 又击败了世界排名第一的围棋选手柯洁&#xff0c;AI 也在德州扑克、Dota 2 等游戏上战胜了专业的人类玩家&#xff0c;越来越聪明的…

基于Yarp实现内网http穿透

Yarp介绍YARP是微软开源的用来代理服务器的反向代理组件&#xff0c;可实现的功能类似于nginx。基于YARP&#xff0c;开发者可以非常快速的开发一个性能不错的小nginx&#xff0c;用于代理http(s)请求到上游的http(s)服务。http穿透原理同网现象在http反向代理里&#xff0c;代…

男科医生到底有多不正经… | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源真是个鬼才&#xff09;赶紧转给了身边有这种经历的朋友↓ ↓ ↓

5张图带你了解Pulsar的存储引擎BookKeeper

Apache BookKeeper是一款企业级存储系统&#xff0c;最初由雅虎研究院研发&#xff0c;在2011年作为Apache ZooKeeper的子项目进行孵化&#xff0c;在2015年1月成为 Apache顶级项目。起初&#xff0c;BookKeeper是一个预写日志(WAL)系统&#xff0c;经过几年的发展&#xff0c;…

筛选装置用c语言编程,一种空壳瓜子筛选装置的制作方法

本实用新型涉及食品机械领域&#xff0c;特别是一种空壳瓜子筛选装置。背景技术&#xff1a;食品机械是指把食品原料加工成食品(或半成品)过程中所应用的机械设备和装置。食品工业是我国国民经济的支柱产业&#xff0c;食品机械是为食品工业提供装备的行业。随着人民生活水平的…

不止 Windows 10!Windows 7/8 也能免费升级到 Windows 11

起初&#xff0c;微软宣布为 Windows 7、Windows 8 和 Windows 8.1 用户提供的 Windows 10 免费升级于 2016 年结束。Windows 11 免费升级近日&#xff0c;微软表示将继续支持从 Windows 7、Windows 8 和 Windows 8.1 用户免费升级到 Windows 10 或 Windows 11 &#xff0c;只要…

c语言求平衡因子,平衡二叉树(AVL树)的基本操作

0x00、平衡二叉树的定义平衡二叉树(AVL树)是一种特殊的二叉搜索树&#xff0c;只是在二叉搜索树上增加了对"平衡"的需求。假如一棵二叉搜索树&#xff0c;按照“1,2,3,4,5”的顺序插入数据&#xff0c;会发现二叉树甚至变成了一个线性的链表状结构&#xff0c;这样查…

学校老师绝对不会教的方法,让你的孩子拥有一个开挂般的人生!

比勤奋更重要的&#xff0c;是孩子的思维能力。从上幼儿园开始&#xff0c;很多父母很喜欢给孩子报各种兴趣班&#xff0c;比如钢琴班、英语班、乐高班、报各种各样的课程&#xff0c;就是希望孩子具有18般武艺&#xff0c;赢在起跑线上。其实除了外在的能力&#xff0c;不显山…

解答网友提问:如何构建动态表达式实现高级查询服务

上次我们介绍了"一秒创建高级查询服务"。前天&#xff0c;有网友在公众号后台问我&#xff0c;怎么使用动态表达式&#xff1a;我想应该是客户提出了更高的要求&#xff0c;查询的条件不仅限于大于、小于&#xff0c;更加多样化&#xff0c;需要动态组合成条件&#…

π!到底蕴藏了多少不为人知的秘密?|今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;赶紧检查一下π里面有没有你的秘密↓ ↓ ↓

.net core 下的分布式事务锁

系统分布式锁的用法公司框架新增功能分布式锁&#xff1a;锁的性能之王&#xff1a;缓存 > Zookeeper > 数据库锁的实现实现原理&#xff1a;核心采用StackExchange.Redis的LockTake方法实现。支持同步获取锁&#xff0c;或者等待直到超时获取锁。/// <summary>///…

刚刚!华为mate30 pro全球首发,三星黯然失色,iPhone11甚至都被吓降价了

全世界只有3.14 % 的人关注了青少年数学之旅众望所归&#xff0c;9月19日&#xff0c;华为在德国慕尼黑发布了Mate30系列。看完发布会&#xff0c;数据汪给大家总结了几个看点&#xff1a;1.全球一样的版本本次华为mate30系列采用的是EMUI 10系统&#xff0c;不会搭载谷歌旗下的…

c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

1.埃尔米特(Hermite)插值1.1.Hermite插值多项式如果对插值函数&#xff0c;不仅要求它在节点处与函数同值&#xff0c;而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值&#xff0c;这就是 Hermite 插值问题。本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的…

剖析XAML语言

这节剖析一下XAML(读作&#xff1a;zaml)——这一WPF中的UI设计语言。XAML在wpf中&#xff0c;UI部分使用xaml语言来编写&#xff0c;xaml语言是由xml语言派生而来的语言&#xff0c;所以在xaml中我们可以看到很多熟悉的特点&#xff1a;它也是使用标签构建页面&#xff0c;一个…

中国最神秘的一所大学,它只存在过8年,却成了永远的第一

全世界只有3.14 % 的人关注了青少年数学之旅本文授权转载于公众号&#xff1a;物道精致生活&#xff08;wudaojieqi&#xff09;&#xff0c;转载请联系物道中国曾经有过这么一所大学&#xff1a;在抗日战争中仓促搭起&#xff0c;被称为“史上最穷”&#xff0c;校舍破旧得梁思…