并行中的分区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…

成绩排序 九度教程c语言,九度OJ 1089 数字反转

题目分析&#xff1a;使用队列存放每一位的数字&#xff0c;然后输出并计算得到反转数值&#xff0c;从而实现数字反转。源代码&#xff1a;[cpp]#include#includeusing namespace std;int main(){int n;cin>>n;int m 1;while (m < n) //控制行数循环{int a,b;cin&…

超越竞争(2) 价值创新

中国武功的最高境界----无招胜有招&#xff01;今天看了朋友的回复&#xff0c;道&#xff1a;回避竞争也是一种竞争策略。的确&#xff0c;我们可以通过回避竞争&#xff0c;寻找差异化的定位&#xff0c;避免正面与竞争对手的冲突&#xff0c;但是当你庆幸着自己抢占了一片新…

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

全世界只有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 的前…

c语言程序设计稀土,稀土掺杂Tarkall-C合金多尺度设计及计算

摘要&#xff1a;为研制应用于船用低速机缸套的新型铸铁材料,提出多尺度设计稀土掺杂Tarkall-C合金,使其符合设计使用要求。本文主要使用多尺度模拟方法,从第一性原理计算及有限元模拟两个方面,对稀土掺杂Tarkall-C合金进行了研究。从第一性原理的角度,从量子尺度研究了稀土掺杂…

WOL远程开机

最近在一直都在研究PC机硬件和软件相结合的软件&#xff0c;硬件信息都是通过C与驱动结合获取。对于一个好久都没有接触C的人来说看这些东西太费劲了&#xff0c;必须的重新捡一下C的基础知识&#xff0c;必然也少不了C知识&#xff0c;底层都是通过C与C结合&#xff0c;提供接…

代码收藏——js+asp 的屏幕滚动脚本

最近刚刚到公司&#xff0c;写得这个东西&#xff0c;放在这里收藏一下&#xff0c;方便以后用。 效果演示&#xff1a;http://www.9600100.com/ <script type"text/javascript" language"javascript"> <%divID%>marqueesHeightone300; <%d…

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;代…

怎么把c语言转换汇编程序,如何把汇编语言转换成C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼程序:ORG 0000HLJMP MAINORG 000BHLJMP TIMEORG 1000HHOUR1 EQU 10hHOUR2 EQU 12hMIN1 EQU 14hMIN2 EQU 16hSEC1 EQU 18HCOUNT EQU 20HNUM1 EQU 22HNUM2 EQU 24HLL4 EQU 26Hs1 bit P1.0s2 bit P1.1s3 bit P1.2s4 bit P1.3A1 EQU 36…

Linux命令——chmod

chmod----改变一个或多个文件的存取模式(mode)chmod [options] mode files只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以who opcode permission形式表示。who是可选的&#xff0c;默认是a(所有用户)。只能选择一个opcode(操作码)。可指定多…

学习STL map, STL set之数据结构基础

STL map和set的使用虽不复杂&#xff0c;但也有一些不易理解的地方&#xff0c;如&#xff1a; 或许有得人能回答出来大概原因&#xff0c;但要彻底明白&#xff0c;还需要了解STL的底层数据结构。 C STL 之所以得到广泛的赞誉&#xff0c;也被很多人使用&#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;食品机械是为食品工业提供装备的行业。随着人民生活水平的…

SO_REUSEADDR

转载&#xff1a; http://www.cppblog.com/aa19870406/archive/2012/07/12/183018.html http://www.cnblogs.com/mydomain/archive/2011/08/23/2150567.html 编写 TCP/SOCK_STREAM 服务程序时&#xff0c;SO_REUSEADDR到底什么意思&#xff1f;这个套接字选项通知内核&#xff…

唱响春天

春天&#xff0c;对就是在这个春天我在博客园里注册了这个ID。一直以来都没有在这里写点什么东西&#xff0c;我想在有空的时候是应该写点东西了。昨天看了江苏卫视的一个叫“绝对唱响”的节目&#xff0c;觉得很有意思&#xff0c;有些许感人的场面&#xff0c;有些触动&#…