菜鸟初步学习,不对的地方请大神指教,参考《C#并行编程高级教程.pdf》

目录

背景

当今计算机至少都有一颗双核的微处理器,带有四核、八核的计算机非常常见,在单个处理器上具有多个内核的时代正在来临,现代微处理器提供了新型的多核架构,因此软件设计和编码能够充分发挥这些架构的功能是非常重要的事情,也要与时俱进。

多核微处理器

多核微处理器有很多种不同的复杂微架构,意在提供更强的并行执行能力,提升吞吐量,减少潜在的性能瓶颈,缩减电源消耗,并减少发热量,因此,现代很多的微处理器可以根据工作负载提升或降低每个内核的时钟频率,甚至可以将不在使用中的内核进入睡眠状态,等需要这些内核的时候,操作系统又会唤醒它们。

硬件线程与软件线程

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

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

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

Windows将每一个硬件线程识别为一个可调度的逻辑处理器,每一个逻辑处理器可以运行软件线程代码,运行多个软件线程的进程可以充分发挥硬件线程和物理内核的优势,并行地运行指令。Windows会给每一个可用的硬件线程分配一块块的处理时间,并通过这种方式运行上百个千个软件线程。

基于任务的并行化设计规则

1.将每个问题分为很多子问题,不需要考虑子问题任务的执行顺序(能够以并行方式处理的数据,能够以某种复杂的并行化处理的数据流等)

2.考虑不用问题连接起来的必要性,需要避免任务与任务之间的依赖性。

3.减少任务与任务之间的临界区。

并行任务的利与弊

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

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

多线程

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

多线程与并行计算区别  参考http://blog.csdn.net/delacroix_xu/article/details/5928121

本质上没有区别,多线程的作用不只是并行计算,还有其他的作用(如降低阻塞,在单核时代,多线程的这个消除阻塞的作用我们称之为“并发”,这和并行本质上是不同的 )

并行计算还可以通过其他的手段来获得,多线程只是其中一种方式(如多进程)

写的有点乱,大家稍微讲究着看下,主要是windows调度器,多核微处理器,硬件线程,软件线程之间的关系 以及 并行任务开发的良好的约束,不对的地方希望大家指正

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

C#并行编程-相关概念的更多相关文章

  1. C#并行编程系列-文章导航

    菜鸟初步学习,不对的地方请大神指教,参考<C#并行编程高级教程.pdf> 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C# ...

  2. C#并行编程-Parallel

    菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...

  3. C#并行编程-Task

    菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...

  4. C#并行编程-并发集合

    菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...

  5. C#并行编程-线程同步原语

    菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...

  6. C#并行编程-PLINQ:声明式数据并行

    目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-PLINQ:声明式数据并行 背景 通过LINQ可 ...

  7. C#并行编程-PLINQ:声明式数据并行-转载

    C#并行编程-PLINQ:声明式数据并行   目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-P ...

  8. C#并行编程 z

    目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-PLINQ:声明式数据并行 背景 基于任务的程序 ...

  9. .Net中的并行编程-2.ConcurrentStack的实现与分析

    在上篇文章<.net中的并行编程-1.基础知识>中列出了在.net进行多核或并行编程中需要的基础知识,今天就来分析在基础知识树中一个比较简单常用的并发数据结构--.net类库中无锁栈的实现 ...

随机推荐

  1. 四川软件人才网:打造四川最专业的IT人才招聘平台

    四川软件人才网(www.tfsp.net),原名:天府软件人才网:为了更好的发展和拓展的业务需要,更名为:四川软件人才网,强力打造四川最专业的IT人才的招聘平台. 网站依托四川软件人才社区,微博,微信 ...

  2. middleware - bodyparser

    express4之前,bodyparser是express下的一个对象. express4把bodyparser分离出来. 本文中的实例基于以下的这个请求 $.ajax({ url: '/save', ...

  3. javascript练习-子类调用父类的构造函数和方法

    function NonNullSet(){ Set.apply(this,arguments); } NonNullSet.prototype = inherit(Set.prototype); N ...

  4. 64位系统 IIS中应用程序池设置导致 访问数据库错误

    64 位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接.导致程序里面的数 ...

  5. 第54讲:Scala中复合类型实战详解

    今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...

  6. Swift让编程更简单 人人都是开发者

    全称为苹果全球开发者大会的WWDC,每年的这个时候,都会如这段时间前后所举行的Google I/O 和微软的BUILD开发者会议一样,吸引全球科技媒体的目光.近几年来,因为在会上爆的猛料越来越多,“开 ...

  7. NSString格式校验

    在项目开发过程中,NSString类型的变量是经常用到的,而且我们常常会对其格式进行对应的各种校验,你比如,在登录注册的时候,需要验证用户名的长度,用户名的字符组成等等,其实现在也有很多第三方提供的N ...

  8. 编译PHP5缺t1lib包安装

    t1lib_doc.dvi Error解决: 1. 下载t1lib-5.1.2.tar.gz2. 解决依赖关系:sudo apt-get build-dep t1lib 3. 安装:./configu ...

  9. 如何判断ScrollView滑动方形

    1/判断滚动视图左右滚动 { CGFloat startContentOffsetX;//滚动开始的坐标 CGFloat willEndContentOffsetX; //滚动即将停止的坐标 CGFl ...

  10. cocoapods的时候出现的问题 _OBJC_CLASS_$_XXX

    最新的cocoapod导入xmpp的时候,会出现循环依赖,所以撸主选择了手动导入. 一开始还用的挺开心的,后来,使用cocoapods导入其他的框架,发现调用的时候总是报错. Undefined sy ...