.NET 4中的并行编程技术(也称之为多核编程技术) 2

WBOY
풀어 주다: 2016-06-07 15:09:52
원래의
927명이 탐색했습니다.

本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍。 本篇文章的议题如下: 1. 并行编程和多线程编程的区别。 2. 并行编程技术的利弊 3. 何时采用并行编程 1.并行编程和多线程编程的区别。 1.1并行编程。 现在随着多核计算

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

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

   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+讲解的形式。
   注:很长时间没有写东西了, :),希望大家见谅!

 

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿