Parallel并行编程初步
Parallel并行编程可以让我们使用极致的使用CPU。并行编程与多线程编程不同,多线程编程无论怎样开启线程,也是在同一个CPU上切换时间片。而并行编程则是多CPU核心同时工作。耗时的CPU计算操作选择并行是明智的。通常情况,每个CPU核心代表一个硬件线程,但超线程技术,可以使一个cpu核心具有两个硬件线程。软件线程顾名思义就是我们在程序中所开启的。
下面看一个最基础的并行编程的例子,也足以体现多核心并行运行的好处,当然微软.NET为我们封装后,我们也不必过多关注底层操作,那我们就看一下运行结果。
static void Main(string[] args)
{
#region 实验1 var watch = Stopwatch.StartNew(); watch.Start(); FirstOption(); SecondOption(); Console.WriteLine("串行编程耗时:{0}", watch.ElapsedMilliseconds); watch.Restart(); Parallel.Invoke(FirstOption, SecondOption); watch.Stop(); Console.WriteLine("并行编程耗时:{0}", watch.ElapsedMilliseconds); Console.Read();
} static void FirstOption()
{
//假装CPU耗时操作
Console.WriteLine("我在时间{0}开始",DateTime.Now);
Thread.Sleep();
Console.WriteLine("我是任务一,耗时3s"); } static void SecondOption()
{
//假装CPU耗时操作
Console.WriteLine("我在时间{0}开始", DateTime.Now);
Thread.Sleep();
Console.WriteLine("我是任务二,耗时5s"); }

看完结果,相信不用我说,你也明白了,并行操作由多核心同时操作。
可能你会问如果我需要执行十几个类似于示例中的Option方法怎么办,那就要看你的核心数量了,如果核心数量不足,并不是所有的操作都是同一秒进行的。

代码就不上了,就是弄了11个option,可以看出我的配置很菜,有些时候同一秒开启只两个option,原因就是另外的option耗时比较长,在占用状态。
下面将介绍Parallel的For循环。并限制其能使用的硬件线程个数。
代码如下:
var bag = new ConcurrentBag<int>();
GC.Collect();
watch.Start(); ParallelOptions options = new ParallelOptions(); //设置硬件线程数
options.MaxDegreeOfParallelism = ;
//options.MaxDegreeOfParallelism = 2;
//options.MaxDegreeOfParallelism = 3;
//options.MaxDegreeOfParallelism = 4; Parallel.For(, , options, i =>
{
bag.Add(i);
});
//for (int i = 0; i < 20000000; i++)
//{
// bag.Add(i);
//}
watch.Stop();
Console.WriteLine("并行计算:集合有:{0},使用的时间:{1}", bag.Count, watch.ElapsedMilliseconds);
Console.ReadKey();
我分别使用1,2,3个硬件线程数和4个硬件线程数作比较。效果很明显!




关于Parallel的For循环,实际上和我们普通的串行编程功能一样,只不过在并行编程中,.NET底层帮助我们大限度的使用了CPU而已。如果你不限制硬件线程数,通常会尽最大可能使用资源。
同时我也测试了串行代码。

另外受环境影响,并行的优势并非绝对。
2016.10.07补充。
在服务器应用上,通常也就是我们的web应用,很多时候使用并行编程会降低你的处理性能,也许在你的用户特别少的情况下会有些作用。
并行编程主要应该是用在桌面应用这种,让用户的机器完全利用起来。
Parallel并行编程初步的更多相关文章
- C# IEnumerable,Lambda表达式和 Parallel并行编程的用法
以前一直主要做C++和C方面的项目,对C#不太了解熟悉,但听说不难,也就一直没有在意学习C#方面的知识.今天有个C#项目,需要做些应用的扩展,同时修改一些bug.但看了C#代码,顿时觉得有些不适应了. ...
- Parallel并行编程
Parallel并行编程 Parallel并行编程可以让我们使用极致的使用CPU.并行编程与多线程编程不同,多线程编程无论怎样开启线程,也是在同一个CPU上切换时间片.而并行编程则是多CPU核心同时工 ...
- .Net并行编程
1.什么是线程?线程和进程的区别是什么? 线程是程序执行的最小单元. 区别: 进程是操作系统进行资源处理和分配的最小单位,而一个进程可以包含多个线程,并共享进程的资源. 2.什么是多线程?为什么设计多 ...
- Task C# 多线程和异步模型 TPL模型 【C#】43. TPL基础——Task初步 22 C# 第十八章 TPL 并行编程 TPL 和传统 .NET 异步编程一 Task.Delay() 和 Thread.Sleep() 区别
Task C# 多线程和异步模型 TPL模型 Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task ...
- C#~异步编程再续~大叔所理解的并行编程(Task&Parallel)
返回目录 并行这个概念出自.net4.5,它被封装在System.Threading.Tasks命名空间里,主要提供一些线程,异步的方法,或者说它是对之前Thread进行的二次封装,为的是让开发人员更 ...
- 【读书笔记】.Net并行编程高级教程--Parallel
一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...
- C#并行编程-Parallel
菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...
- C#并行编程中的Parallel.Invoke
一.基础知识 并行编程:并行编程是指软件开发的代码,它能在同一时间执行多个计算任务,提高执行效率和性能一种编程方式,属于多线程编程范畴.所以我们在设计过程中一般会将很多任务划分成若干个互相独立子任务, ...
- Net并行编程高级教程--Parallel
Net并行编程高级教程--Parallel 一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控 ...
随机推荐
- HDFS 架构解析
本文以 Hadoop 提供的分布式文件系统(HDFS)为例来进一步展开解析分布式存储服务架构设计的要点. 架构目标 任何一种软件框架或服务都是为了解决特定问题而产生的.还记得我们在 <分布式存储 ...
- Reactive Extensions(Rx) 学习
Bruce Eckel(著有多部编程书籍)和Jonas Boner(Akka的缔造者和Typesafe的CTO)发表了“反应性宣言”,在其中尝试着定义什么是反应性应用. 这样的应用应该能够: 对事件做 ...
- [开源]基于WPF实现的Gif图片分割器,提取GIf图片中的每一帧
不知不觉又半个月没有更新博客了,今天终于抽出点时间,来分享一下前段时间的成果. 在网上,我们经常看到各种各样的图片,尤其是GIF图片的动态效果,让整个网站更加富有表现力!有时候,我们看到一些比较好看的 ...
- sysbench 压力测试
200 ? "200px" : this.width)!important;} --> 介绍 sysbench是一个模块化.跨平台.多线程基准测试工具,主要用于测试不同系统参 ...
- Android APK是否需要预解压
今天在逛论坛的时候,发现有一个朋友问的问题.其主要目的,是想实现 玩家首次进入游戏的时候,或者新安装了版本的时候,对APK进行解压,写入SD卡.这样游戏运行过程中,将不会再从APK中读取资源. 以提高 ...
- 《App研发录》面世
古者富贵而名灭,不可胜记,唯倜傥非常之人称焉.故西伯拘而演<周易>,屈原放逐,乃赋<离骚>.文人雅士一次次的谱写着千古绝唱,而我亦不能免俗,也要附庸风雅,写一部前不见古人.后不 ...
- innerHTML,outerHTML,innerText,outerText区别以及insertAdjacentHTML()方法
在需要给文档插入大量的新的HTML标记的情况下,通过多次DOM操作先创建节点再指定它们之间的关系会非常麻烦而且效率不高,相对而言插入标记的方法会更加简单,速度也更快. 插入标记中有这四个属性inner ...
- react-native 简述
1. RN 是什么 2. RN 与传统Hybrid框架相比的优势 3. RN的优势 4. RN的劣势 5. RN开发重点关注的问题 1 RN是什么 2 RN 与传统Hybrid框架相比的优势 传统的如 ...
- HTML5的实用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #ffffff } p.p2 ...
- Wireshark图解教程(简介、抓包、过滤器)
开篇语 Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息.与很多其他网络工具一样,Wireshark也使用pcap netw ...