.NET并行编程--简介(一)
2014-04-30 13:58 贺臣 阅读(504) 评论(0) 收藏 举报最近在实施项目过程中遇到了一些问题,由于工厂加工数据量稍微有点大,系统运行表现的非常慢,有些人说机器的配置不够,网络宽带不够等等因素导致系统运行缓慢,当然这的确也是一部分原因。但是从我个人的角度来看,目前的系统生产的数据量虽然有点大,但是机器的性能并没有完全发挥出来。
现在系统的机器配置情况是两台服务器,一台是4核(2.4GHZ),8G内存 的戴尔服务器,另外一台是双核(2.4GHZ),4G 内存 ,两台都是用做数据库服务器,因为是客户端软件所以没有IIS什么问题。就目前系统的访问量来看,这两台机器足以支撑这个系统的运行,但是为什么还是表现的慢,别人一开口就提要加CPU,要加内存,但是实际上系统根本就没有使用到这么高的内存和CPU。是什么原因导致其运算速度慢?
本文从程序的角度来记录一下最近的的性能调优。前不久看到了.NET中的并行编程,之前很早就马马虎虎的看过这个东西,但是并没有详细去了解和参详,这次调优的过程使用到了一下并行编程的东西,这里简单记录整理成文,供后期学习使用。
(一) 并行编程
对于什么是并行编程,这里简单理解:以往我们写的程序都是命令顺序执行的,在同一个内核处理器上要等到一个处理完下一个继续处理,而并行编程就是多个任务可以分配到不同的处理器上同时执行。现在的机器一般都配有双核以及以上的处理器,如何将命令任务分配到不同的处理器上同时执行那就是并行编程的任务。
(二) .NET中的并行编程
其实在很久之前就有并行编程了,但是在.NET中要使用并行编程需要使用.NET4.0以及以上版本.并行程序设计是程序设计的一种形式,以这种形式编写的代码能够充分利用底层硬件所提供的并行执行能力,并行程序设计能够同时运行很多的指令,充分利用处理器的达到体能提升的效果。
(三)硬件线程和软件线程
物理内核是真正的独立处理单元,多个物理内核可以使得多条指令同时运行。为了充分的发挥多物理内核的功效,我们会使用多个进程,而每个进程又可以创建多个线程。
而一个物理内核又可以提供多个硬件线程,也就是逻辑内核.而使用超线程技术,可以在每个物理内核上提供多份架构状态,比如2个物理内核,使用超线程技术每个内核上提供2份架构状态,从而获得4个硬件线程。这也就是我们常说的双核四线程,在计算机上显示4个处理,其实只有两个真正的物理内核。
(四)基于任务的并行编程
在做并行任务设计的时候,我们需要提供要注意一下一些步骤:
1. 将每个任务分解为不同的小问题,完全不用去考虑其执行的顺序问题
2. 每个字问题又可以分为如下几种情况:
(a)能够以并行的方式处理的数据--对数据分解能够实现并行
(b)需要很多任务,而且能够以某种复杂的并行化并行处理的数据流
(c)可以并行运行的任务
3. 将程序设计为可以并行的的形式
4.考虑不同子任务之间的关联性,避免过多的依赖
5.考虑并发以及潜在的并行化
6.尽可能的通过任务化的形式来设计程序