c#并行编程

作者:释迦苦僧 出处:http://www.cnblogs.com/woxpp/p/3924476.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接

一、相关概念

背景:当今计算机至少都有一颗双核的微处理器,带有四核、八核的计算机非常常见,在单个处理器上具有多个内核的时代正在来临,现代微处理器提供了新型的的多核架构,

因此软件设计和编码能够充分发挥这些架构的功能是非常重要的事情,也要与时俱进。

多核微处理器:

多核微处理器有很多不同的复杂微结构,意在提供更强的并行执行能力,提升云吐量,减少潜在的性能瓶颈,缩减电源消耗,并减少发热量,因此,现代很多的微处理器可以根据工作负载提升或

降低每个内核的时钟频率,甚至可以将不在使用中的内核进入睡眠状态,等需要这些内核的时候,操作系统又会唤醒它们。

硬件线程与软件线程

多核处理器带有一个以上的物理内核,每个物理内核 都可能会提供多个硬件线程,也称之为逻辑内核或者逻辑处理器。

windows中每个运行的程序都是一个进程,每个进程都会创建并运行一个或者多个线程,也被称为软件线程(software thread),在一个进程当中只要有一个线程,这个线程我们就称之为主线程。

操作系统的调度器在所有要运行的进程和线程之间公平的分享可用的处理资源,给每一个软件线程分配处理时间,当Windows调度器运行在多核微处理器上时,调度器必须从物理内核支持的硬件线程中分配时间给一个需要运行指令的软件线程。

并行任务的利与弊

1、并行任务的运行和管理都是需要开销的,在程序中需要执行的任务越多,并行的效果越好。

2、并行任务中对于共享的资源或数据越多,对并行任务的执行性能损耗越大,如果每个任务的资源都是独立存在的,性能会好很多。

多线程

多线程是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多一个线程,进而提升处理能力。

多线程的作用不只是并行计算,还有其他的作用(如降低阻塞,在单核时代,多线程的这个消除阻塞的作用我们称之为"并发",)

二、Parallel

TPL中引入了一个新命名空间System.Threading.Tasks,在该命名空间下Task是主类,表示一个类的异步的并发的操作, 创建并行代码的时候不一定要直接使用task类,在某些情况下可以

直接使用Parallel静态类(System.Threading.Tasks.Parallel)下所提供的方法,而不用底层的Task实例。

Parallel.Invoke

试图将很多方法并行运行,如果传入的是4个方法,则至少需要4个逻辑内核才能足以让这四个方法并发运行,逻辑内核也称为硬件线程。

需要注意的是:1、即食拥有4个逻辑内核,也不一定能够保证所需要运行的4个方法并发运行,逻辑内核也称为硬件线程,如果其中的一个内核处于繁忙状态,那么底层的调度逻辑可能会延迟某些方法的初始化执行。

2、通过Parallel.Invoke编写的并发执行代码一定不能依赖于特定的执行顺序,因为它的并发顺序也是不定的。

3、使用Parallel.Invoke方法一定要测量运行结果、实现加速比

猜你喜欢

转载自www.cnblogs.com/cacti/p/9669670.html