代码改变世界

随笔分类 -  Parallel Programming

.Net 4.0 Parallel 编程之旅

2011-06-06 13:28 by Henry Cui, 1811 阅读, 收藏, 编辑
摘要: 在过去的时间里写了9篇Post关于.Net 4.0 Parallel 编程部分的内容,现在整理下,方便自己以后回顾阅读。 首先我们从基础的Loop开始: 1).Net4.0 Parallel编程(一)Data Parallelism 上 2).Net4.0 Parallel编程(二)Data Parallelism 中 3).Net4.0 Parallel编程(三)Data Parallelism下 然后我们看看Task: 1).Net 4.0 Parallel 编程(四) Task(上) 2).Net 4.0 Parallel 编程(五)Task(中) 3).Net 4.0 ... 阅读全文

.Net 4.0 Parallel 编程(九)Task中的数据共享(下)

2011-04-21 10:17 by Henry Cui, 2975 阅读, 收藏, 编辑
摘要: 在上篇Post中我们看过了几种常用的同步类型,本篇文章会介绍下申明性的同步的实现以及对于集合类型数据共享的问题,首先看下申明性同步的实现。 申明性同步 我们可以通过使用Synchronization 特性来标识一个类,从而使一个类型的字段以及方法都实现同步化。在使用Synchronization 时,我们需要将我们的目标同步的类继承于System.ContextBoundObject类型。我们来看看之前的例子我们同步标识Synchronization 的实现: [Synchronization]class SumClass : ContextBoundObject{ private int _ 阅读全文

.Net 4.0 Parallel编程(八)Task中的数据共享(中)

2011-04-12 22:41 by Henry Cui, 2437 阅读, 收藏, 编辑
摘要: 在上篇文章中我们看过了多线程中的数据共享问题,以及通过分离执行来解决的办法。本篇文章就数据共享的同步处理中的一些常见的方法进行一些介绍。 数据同步时的步骤 我之前的文章我们对数据共享问题处理的方式是“分离执行”,我们通过把每个Task执行完成后的各自计算的值进行最后的汇总,也就是说多个Task之间不存在数据共享了,各自做各自的事,完全分离开来。可是这毕竟不是我们常规的处理办法,这样我们会花更多的经历在分离上。其实我们主要的数据共享在Sum上: for (int j = 0; j < 1000; j++){ Sum++;}那我们可以通过一种有序的机制来访问Sum,即当一个Task在进行Su 阅读全文

.Net 4.0 Parallel 编程(七)Task中的数据共享(上)

2011-04-07 13:08 by Henry Cui, 2865 阅读, 收藏, 编辑
摘要: 在前几篇文章中我们看过Parallel Loop以及Task 部分内容,而在多线程的编程中我们较为痛疼的就是多线程中的数据共享问题以及数据同步的问题。本篇Post以及后面的几篇Post中会探讨下TPL中数据共享的常见问题以及其常规的解决办法。 引例 首先我们来看下面的一段代码: static void Main(string[] args){ int Sum = 0; Task[] tasks = new Task[10]; for (int i = 0; i < 10; i++) { tasks[i] = new Task(() => { for (int j = 0; j &l 阅读全文

.Net 4.0 Parallel 编程(六)Task(下)

2011-03-27 14:57 by Henry Cui, 2962 阅读, 收藏, 编辑
摘要: 在之前的文章中已经介绍过了Task的基本使用了,以及如何取消任务、任务继续等功能。本篇Post主要就Task的异常处理以及Wait功能进行些介绍。 等待时间执行 在TPL中我们可以通过三种方式进行等待,一是通过CancellTaken的WaitHanle进行等待、第二种则是通过传统的Tread.Sleep方法、第三种则通过Thread.SpainWait方法。 CancellToken方式: static void Main(string[] args){ var cancell = new CancellationTokenSource(); var token = cancell.Toke 阅读全文

.Net 4.0 Parallel 编程(五)Task(中)

2010-10-28 22:04 by Henry Cui, 2596 阅读, 收藏, 编辑
摘要: 在上篇文章中我们看过了如何创建Task,本篇文章就各种类型Task的使用进行说明。 Task Continuations 首先我们来看看延续的Task,所谓的延续的Task就是在第一个Task完成后自动启动下一个Task。我们通过ContinueWith方法来创建延续的Task。我们假设有一个接受xml解析的服务,首先从某个地方接受文件,然后解析入库,最后返回回执是否解析正确: 在每次调用C... 阅读全文

.Net 4.0 Parallel 编程(四) Task(上)

2010-10-18 22:27 by Henry Cui, 3408 阅读, 收藏, 编辑
摘要: 在之前的文章中,已经介绍过了Parallel Loop(上、中、下)的相关内容。本篇文章中会就Task基础部分进行些介绍。 初识Task 首先我们来构建一个简单的Task的Demo: 在上面这段代码中我们构建出了一段非常简单的使用Task类的代码,通过其Factory属性的创建出一个Task。其运行结果可想而知。其实上面的代码跟:是一样的,只是StartNew方法直接构建出了一个Task之后... 阅读全文

.Net 4.0 DynamicObject使用(下)

2010-07-11 18:44 by Henry Cui, 4195 阅读, 收藏, 编辑
摘要: 在上篇文章中我们看过了DynamicObject的基本使用,这篇文章中我们通过Dynamic来实现一个操作xml的动态类型,让我们更为方便的操作xml。 其实在前面的使用ExpandoObject的文章中我们已经,通过ExpandoObject来实现了操作Xml,并体现了动态性,但是不好的是,里面没有Linq to Xml大量Api的支持,操作起来很不方便,同时我们需要编写大量的辅助方法才行。而... 阅读全文

.Net4.0 Parallel编程(三)Data Parallelism下

2010-06-14 19:31 by Henry Cui, 2480 阅读, 收藏, 编辑
摘要: 在上篇文章中介绍了如何Break、Stop循环,以及如何定义线程局部变量。在本文中介绍如何在外部去取消循环、以及异常的处理。 Cancel 在并行的循环中支持通过传递ParallelOptions参数中的CancellationToken进行取消循环的控制,我们可以CancellationTokenSource实例化之后传递给ParallelOptions对象Cancellation值。下面来... 阅读全文

.Net4.0 Parallel编程(二)Data Parallelism 中

2010-06-09 21:58 by Henry Cui, 3360 阅读, 收藏, 编辑
摘要: 在上篇文章中看过了使用Parrallel.For、Parael.Foreach在效率上给我们带来的提高。本文就来如何终止循环、线程局部变量 进行说明。 Thread-Local Variables 首先我们来看下线程局部变量,是的我们也许一直在想我们如何去定义一个线程局部变量呢。先看段顺序执行的代码: 执行结果: 我们再来看这段代码:执行结果: 再运行下: 也许我们会感到很奇怪为什么会这样呢... 阅读全文

.Net4.0 Parallel编程(一)Data Parallelism 上

2010-05-01 16:42 by Henry Cui, 4314 阅读, 收藏, 编辑
摘要: 现在已经进入了多核的时代,我们的程序如何更多的利用好cpu,答案是并行处理。在.net4.0之前我们要开发并行的程序是非常的困难,在.net4.0中,在命名空间System.Threading.Tasks提供了方便的并行开发的类库。本文中主要看看Data Parallel, 看看并行的For、Foreach。 Parallel.For 首先先写一个普通的循环: 再看一个并行的For语句:看... 阅读全文

VS2010 Tips(一) LayerDiagram

2010-04-15 23:46 by Henry Cui, 2346 阅读, 收藏, 编辑
摘要: VS2010已经正式发布,最近一直在尝试里面的一些新的工具以及结合TFS的一些使用,本篇文章中使用了下分层图。 准备 首先我在建立了一个项目叫:Entity4Demo.Access项目是用Entity FrameWork做的一个数据访问层,然后建立了一个Test项目,结构图如下: 在以前如果项目很多的时候,我们很难去辨别我们的各个Project有没有按照我们当初的层次结构去开发,而在VS2010里... 阅读全文