.NET 4 并行(多核)编程系列之一入门介绍

  本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍。

  本篇文章的议题如下:
   1. 并行编程和多线程编程的区别。
   2. 并行编程技术的利弊
   3. 何时采用并行编程

  系列文章链接:

  .NET 4 并行(多核)编程系列之一入门介绍

  .NET 4 并行(多核)编程系列之二 从Task开始

  .NET 4 并行(多核)编程系列之三 从Task的取消

  .NET 4 并行(多核)编程系列之四 Task的休眠

  .NET 并行(多核)编程系列之五 Task执行和异常处理

  .NET 并行(多核)编程系列之六 Task基础部分完结篇

  .NET 并行(多核)编程系列之七 共享数据问题和解决概述

  1.并行编程和多线程编程的区别。

  1.1并行编程。
   现在随着多核计算机的普及,并行编程技术,也就是多核编程技术也逐渐称为开发的主流。为此,在.NET 4 中就引入了“并行编程”。在.NET 4 中一些列的Library和类为并行编程提供了支持,如: Task Parallel Library,Parallel  LINQ等。

   其实在.NET 1.0中就有了并行编程技术的一些实现---多线线程技术。多线程最大的问题就是难于使用和管理。在使用多线程的使用,因为它的复杂性,往往使用我们把注意力分散了多线程上。而致使我们的最初目的被掩盖了。

  1.2 比较区别
   在.NET 4中提出的并处编程的底层机制其实还是基于多线程的。但是他们之前最大的区别就是.NET 4中的并行编程更加方便。

  在传统的编程模型中,程序员负责创建线程,为线程分配任务,管理线程。一个形象的比喻:你拥有一批士兵,然后你对他们下达命令,之后,你就必须时刻监视你的那些士兵,确保他们按照你的意图办事。(很累吧!)

  在.NET 4中的并行编程是依赖Task Parallel Library(后面简称为TPL) 实现的。在TPL中,最基本的执行单元是task(中文可以理解为"任务"),一个task就代表了你要执行的一个操作。你可以为你所要执行的每一个操作定义一个task,TPL就负责创建线程来执行你所定义的task,并且管理线程。TPL是面向task的,自动的;而传统的多线程是以人工为导向的。

  Task机制使得我们把注意力关注在我们要解决的问题上面。如果之前的多线程技术使得我们放弃了一些并行编程的使用,那么.NET 4中的新的并行编程技术可以让我们重新建立信心。

  虽然有了新的并行技术,但是传统的多线程的技术还是很有用的。当我们使用TPL中的并行技术的时候来执行多个task的时候,我们不用在关心底层创建线程,管理线程等。

  2. 并行编程技术的利弊
   使用并行技术最大的好处就是提高了系统的性能。并行处理过程一般是这样的:一个要执行的任务被拆分为很多很小的部分,然后这些很小的部分就分别在不同处理器(可以是多核的一台电脑,也可以使很多的电脑)上执行。因为这些很多很小的部分同时在执行,所以称之为"并行"。
   使用并处编程的时候需要考虑下面的问题:

  1.开销问题。
   并行执行不是免费的,也是要开销的。在并行运行开始和管理都是需要开销的,就类比在线程的创建和管理一样。在程序中,你要执行的任务越多,那么使用并行的效果就越好。

  2. 数据的协调
 如果在并行执行的那些小部分需要共享公共的数据,那么我们就要协调。一般来说,需要协调的数据越多,并行执行的性能损耗就越大。如果执行各个小部分之间都是独立的,那么我们就不用协调了。但是很多的时候,我们都是需要协调的。而且协调的技术也不是很难,在之后的文章中会一一讲述。

  3.性能提高多少
 增加一台计算机的CPU可能会提高程序的运行速度,但是不是绝对的。我们知道,一个应用程序在单核的计算机上运行的时间不一定(往往也不是)双核计算机的
1/2.所以,采用并行编程不一定就一定会成倍的提高程序的性能。因为性能与很多的因数有关的,硬件就是很大的因数。

   3. 何时采用并行编程

   建议:如果一个问题能够用并行编程解决,那么就用,否则就不用。听起来好像是废话,但是确实是一个很不错的建议。因为并行编程也不是万能的,也只能
解决一类的问题,所以在用之前要分析问题了。如果一个问题确实能够用并行的方案来解决,但是有很多的因数影响,如之前我们提到的一些问题。权衡使用之后的开销和好处在决定是否使用。后续文章会给出很多的例子。

  今天暂时写到这里吧,理论讲了一大堆的,希望园里的朋友见谅啊!从下篇开始就用code+讲解的形式。
   注:很长时间没有写东西了, :),希望大家见谅!

  版权为小洋和博客园所有,转载请标明出处给作者。

  http://www.cnblogs.com/yanyangtian

.NET 4 并行(多核)编程系列之一入门介绍相关推荐

  1. .NET 并行(多核)编程系列之七 共享数据问题和解决概述

    .NET 并行(多核)编程系列之七 共享数据问题和解决概述 原文:.NET 并行(多核)编程系列之七 共享数据问题和解决概述 .NET 并行(多核)编程系列之七 共享数据问题和解决概述 前言:之前的文 ...

  2. .NET 并行(多核)编程系列之六 Task基础部分完结篇

    .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些使用方法,本篇很短,将会结束Task的基础知识的介绍. 本篇的主要 ...

  3. 一起谈.NET技术,.NET并行(多核)编程系列之七 共享数据问题和解决概述

    之前的文章介绍了了并行编程的一些基础的知识,从本篇开始,将会讲述并行编程中实际遇到一些问题,接下来的几篇将会讲述数据共享问题. 本篇的议题如下: 1.数据竞争 2.解决方案提出 3.顺序的执行解决方案 ...

  4. SpringBoot 2.0 系列001 -- 入门介绍以及相关概念

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...

  5. linux多核编程系列之调度亲和性,关于CPU亲和性,这篇讲得最全面

    何为CPU的亲和性 CPU的亲和性,进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性,进程迁移的频率小就意味着产生的负载小.亲和性一词是从affinity翻译来的,实际可以 ...

  6. c# hdf5 写string_Pandas系列之入门篇——HDF5

    Python系列之入门篇--HDF5 简介 HDF5(层次性数据格式)作用于大数据存储,其高效的压缩方式节约了不少硬盘空间,同时也给查询效率带来了一定的影响,压缩效率越高,查询效率越低.pandas ...

  7. [C# 网络编程系列]专题十二:实现一个简单的FTP服务器

    引言: 休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务 ...

  8. .Net并行编程系列文章导航

    .Net4.0并行编程系列文章如下: 多核时代 .NET Framework 4 中的并行编程9---线程安全集合类 多核时代 .NET Framework 4 中的并行编程8---任务的同步 多核时 ...

  9. python并行编程语言_Python3 系列之 并行编程

    Python Python开发 Python语言 Python3 系列之 并行编程 进程和线程 进程是程序运行的实例.一个进程里面可以包含多个线程,因此同一进程下的多个线程之间可以共享线程内的所有资源 ...

最新文章

  1. vs2017开发php,C#编写的可供PHP调用的com dll(Visual studio 2017)
  2. intellij存放插件的路径(转载)
  3. php+insert+into+注入,PHP+MySQL之Insert Into数据插入用法分析
  4. 好看的动态实时时间显示时钟HTML源码
  5. js文件,同样的路径,拷贝过来的为什么不能访问
  6. 简单几招提速 Kotlin Kapt编译
  7. 64位centos下QQ无法输入中文只能输入英文
  8. 从区划边界geojson中查询经纬度坐标对应的省市区县乡镇名称,开源Java工具,内存占用低、高性能
  9. C++实现求解完美数算法
  10. 支付宝 错误代码 insufficient-isv-permissions 错误原因: ISV权限不足,建议在开发者中心检查签约是否已经生效
  11. 基于cpolar内网穿透工具ssh远程访问linux服务器
  12. 商城项目实战32:商品详情页实现
  13. java fmail发送邮件_【已实测通过】JavaMail常用的几种邮件发送方式
  14. uos应用_终极指标(UOS)应用法则
  15. ubuntu linux编译环境搭建,Ubuntu14.04开发环境搭建
  16. 关于matches()的使用
  17. 1076 Forwards on Weibo——最后用menset函数
  18. 数学模型9.1代码记录
  19. 756 金字塔转换矩阵
  20. R语言练习题答案(5)第五章 初级绘图

热门文章

  1. rhel6.3yum源的几种配置解析
  2. mac下显示隐藏文件的方法
  3. java ant 详解
  4. Android开发学习之Xml解析归纳
  5. 爬虫入门之绘图matplotlib与词云(七)
  6. jq 展示数据小细节
  7. 《企业迁云实战》——2.4 云端实践
  8. 20161120-安全测试
  9. SQL:两种获取时间类型日期部分的方法
  10. Office 365强势来袭PART3:管理云用户