《C#并行编程高级教程》第2章 命令式编程 笔记
Parallel.Invoke
{
Parallel.Invoke(
() => ConvertEllipses(),
() => ConvertRectangles(),
() => ConvertLines(),
() => ConvertText());
System.Console.ReadLine();
}
static void ConvertEllipses()
{
System.Console.WriteLine("Ellipses converted.");
}
static void ConvertRectangles()
{
System.Console.WriteLine("Rectangles converted.");
}
static void ConvertLines()
{
System.Console.WriteLine("Lines converted.");
}
static void ConvertText()
{
System.Console.WriteLine("Text converted.");
}
先给两段基本代码,方便后面理解。将Byte[]转成16进制表示的字符串{
sb.Append(byteArray[i].ToString("X2"));
}
return sb.ToString();
}
Stopwatch和Debug在System.Diagnostics
;
; i <= NUM_AES_KEYS; i++)
{
aesM.GenerateKey();
byte[] result = aesM.Key;
string hexString = ConvertToHexString(result);
// Console.WriteLine("AES KEY: {0} ", hexString);
}
Debug.WriteLine("AES: " + sw.Elapsed.ToString());
}
Parallel.For
不支持浮点数和进步。无法保证迭代执行的顺序{
var aesM = new AesManaged();
byte[] result = aesM.Key;
string hexString = ConvertToHexString(result);
// Console.WriteLine(“AES KEY: {0} “, hexString);
});
Debug.WriteLine("AES: " + sw.Elapsed.ToString());
}
Parallel.ForEach
{
var aesM = new AesManaged();
Debug.WriteLine(
"AES Range ({0}, {1}. TimeOfDay before inner loop starts: {2})",
range.Item1, range.Item2,
DateTime.Now.TimeOfDay);
for (int i = range.Item1; i < range.Item2; i++)
{
aesM.GenerateKey();
byte[] result = aesM.Key;
string hexString = ConvertToHexString(result);
// Console.WriteLine(“AES KEY: {0} “, hexString);
}
});
Debug.WriteLine("AES: " + sw.Elapsed.ToString());
}
根据内核数目优化分区
Partitioner.Create(,NUM_AES_KEYS,(()),
range =>
{
//...
});
使用IEnumerable数据源
, NUM_MD5_HASHES);
}
private static void ParallelForEachGenerateMD5Hashes()
{
var sw = Stopwatch.StartNew();
var inputData = GenerateMD5InputData();
Parallel.ForEach(inputData, (int number) =>
{
var md5M = MD5.Create();
byte[] data =
Encoding.Unicode.GetBytes(
Environment.UserName + number.ToString());
byte[] result = md5M.ComputeHash(data);
string hexString = ConvertToHexString(result);
// Console.WriteLine("MD5 HASH: {0}", hexString);
});
Debug.WriteLine("MD5: " + sw.Elapsed.ToString());
}
从并行循环中退出
(int number, ParallelLoopState loopState) =>
{
//...
loopState.Break();
return;
//...
});
捕获并行循环的异常
{
loopResult = Parallel.ForEach(inputData,
(int number, ParallelLoopState loopState) =>
{
//...
throw new Exception();
//..
});
}
catch (AggregateException ex)
{
foreach (Exception innerEx in ex.InnerExceptions)
{
Debug.WriteLine(innerEx.ToString());
}
}
ParaleelOption
{
var aesM = new AesManaged();
byte[] result = aesM.Key;
string hexString = ConvertToHexString(result);
// Console.WriteLine(“AES KEY: {0} “, hexString);
});
Debug.WriteLine("AES: " + sw.Elapsed.ToString());
}
《C#并行编程高级教程》第2章 命令式编程 笔记的更多相关文章
- 【读书笔记】.Net并行编程高级教程(二)-- 任务并行
前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...
- 【读书笔记】.Net并行编程高级教程--Parallel
一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...
- Net并行编程高级教程--Parallel
Net并行编程高级教程--Parallel 一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控 ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- 《C#并行编程高级教程》第9章 异步编程模型 笔记
这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...
- 《C#并行编程高级教程》第5章 协调数据结构 笔记
本章介绍了一些轻量级的同步原语,其中有很大部分是.NET Framework 4才引入的. System.Threading.Barrier 用于一段程序分成多个阶段,每个阶段的开始都需要之前的阶段完 ...
- 《C#并行编程高级教程》第6章 PLINQ:声明式数据并行 笔记
PLINQ这个话题好多书都写到过,这本也没有什么特别好的地方. 几个有用和有趣的点记录一下. 顺序的不确定性 用PLINQ就一定要记住并行后会导致顺序不确定的问题.解决方案就是AsOrdered或 ...
- 《C#并行编程高级教程》第4章 并发集合 笔记
这一章主要介绍了System.Collections.Concurrent下的几个类. ConcurrentQueue<T> 并发队列.完全无锁,使用CAS(compare-and-swa ...
- 《C#并行编程高级教程》第8章 线程池 笔记
主要的几个概念(详细最好还是看书,配合插图看) 任务是会被分配到线程上的,而这些线程都在线程池引擎下管理 线程池引擎管理着合适数量的线程池,线程从全局队列获取工作项执行. .NET4 Framew ...
随机推荐
- grant授权“失败”的原因
在创建用户的时候我们通常采用grant命令完成,并同时赋予相应的权限,例如我们创建一个名为test的用户,g并赋予其对数据库foo下所有表格select,delete,drop,create权限: g ...
- 用Objective-C的foundation框架解决表达式求值问题
主要思想: 本程序分2个类 一个是ExpressionString类,主要用于存储表达式以及对它进行求值.以下是该类中的内容: (NSString *)expString//用于存储要计算的表达式: ...
- Python3 内建模块 datetime/collections/base64/struct
datetime 我们先看如何获取当前日期和时间: >>> from datetime import datetime >>> now = datetime.now ...
- jquery ajax php 无刷新上传文件 带 遮罩 进度条 效果的哟
在很多项目中都会叫用户上传东西这些的,自从接触了jquery 和ajax之后就不管做什么,首先都会想到这个,我这个人呢?是比较重视客户体验的,这次我这边负责的是后台板块,然后就有一块是要求用户上传照片 ...
- java 的输入/输出
java 的输入/输出 java的 I/O是通过java.io包下的类和接口支持, 其中最重要的是5个类,分别是 File,OutputStream,InputStream, Write,Reader ...
- 使用WebClient上传文件并同时Post表单数据字段到服务端
之前遇到一个问题,就是使用WebClient上传文件的同时,还要Post表单数据字段,一开始以为WebClient可以直接做到,结果发现如果先 Post表单字段,就只能获取到字段及其值,如果先上传文件 ...
- centos 端口开放及关闭
之前有讲过公司新买的服务器使用的是CentOS 5.5,部署好Tomcat之后却发现输入114.80.*.*:8080(即ip:8080)却无法显示Tomcat默认的首页.因为以前部署在Win Ser ...
- Windows 下Python操作MySQL
1.环境要求(Win7 X64): python 2.7, MySQL-python-1.2.3.win-amd64-py2.7 :http://www.codegood.com/download/1 ...
- 【2】认识Bootstrap
作为当下最流行的前端开发框架Bootstrap,它可大大简化网站开发过程,从而深受广大开发者的喜欢,当然你去它的官网中文网站就能看到大大的小标定义:“简洁.直观.强悍.移动设备优先的前端开发框架,让w ...
- Silverlight应用程序中调用WCF Ria Services访问数据库图片
WCF Ria Services(通常称为RIA服务),专门设计让Silverlight应用程序访问数据库,网上有关其示例应用都是基于简单的数据显示,其中MSDN网站上有详细的解决方案介绍,地址htt ...