
并行开发
nic7968
这个作者很懒,什么都没留下…
展开
-
并行开发2——Task的使用
在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别?1:任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。2:任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这转载 2013-04-02 01:57:37 · 622 阅读 · 0 评论 -
并行开发4——同步机制(上)
在并行计算中,不可避免的会碰到多个任务共享变量,实例,集合。虽然task自带了两个方法:task.ContinueWith()和Task.Factory.ContinueWhenAll()来实现任务串行化,但是这些简单的方法远远不能满足我们实际的开发需要,从.net 4.0开始,类库给我们提供了很多的类来帮助我们简化并行计算中复杂的数据同步问题。大体上分为二种:① 并发集合转载 2013-04-02 01:59:38 · 641 阅读 · 0 评论 -
并行开发7——简要分析任务与线程池
其实说到上一篇,我们要说的task的知识也说的差不多了,这一篇我们开始站在理论上了解下“线程池”和“任务”之间的关系,不管是说线程还是任务,我们都不可避免的要讨论下线程池,然而在.net 4.0以后,线程池引擎考虑了未来的扩展性,已经充分利用多核微处理器架构,只要在可能的情况下,我们应该尽量使用task,而不是线程池。首先看一下task的结构从图中我们可以看出Task.Fa转载 2013-04-02 02:03:41 · 568 阅读 · 0 评论 -
并行开发1——Parallel的使用
要了解并行开发,需要先了解下两个概念:“硬件线程”和“软件线程”。1. 硬件线程 相信大家手头的电脑都是双核以上的,像我这样古董的电脑都是双核的,这样的双核叫做物理内核。硬件线程又叫做逻辑内核,我们可以在”任务管理器“中查看”性能“标签页,如下图,我们知道有2个硬件线程。一般情况下,一个物理内核对应一个逻辑内核,比如我这里的2对2。当然如果你的cpu采用的转载 2013-04-02 01:51:53 · 762 阅读 · 0 评论 -
并行开发5——异步编程模型
在.net里面异步编程模型由来已久,相信大家也知道Begin/End异步模式和事件异步模式,在task出现以后,这些东西都可以被task包装起来,可能有人会问,这样做有什么好处,下面一一道来。一: Begin/End模式1: 委托 在执行委托方法的时候,我们常常会看到一个Invoke,同时也有一对你或许不常使用的BeginInvoke,EndInvoke方法对,当然Inv转载 2013-04-02 02:02:32 · 575 阅读 · 0 评论 -
并行开发3——plinq的使用
相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的年代如果linq不支持并行计算那该是多么遗憾的事情啊。 当然linq有很多种方式,比如linq to sql ,xml,object 等等,如果要将linq做成并行还是很简单的,这里我就举一个比较实际一点的例子,我们知道为了更快的响应用户操作,码转载 2013-04-02 01:58:27 · 582 阅读 · 0 评论 -
并行开发4——同步机制(下)
承接上一篇,我们继续说下.net4.0中的同步机制,是的,当出现了并行计算的时候,轻量级别的同步机制应运而生,在信号量这一块出现了一系列的轻量级,今天继续介绍下面的3个信号量 CountdownEvent,SemaphoreSlim,ManualResetEventSlim。一:CountdownEvent 这种采用信号状态的同步基元非常适合在动态的fork,join的场景转载 2013-04-02 02:00:24 · 634 阅读 · 0 评论 -
并行开发8——用VS性能向导解剖你的程序
说说vs的“性能向导",通常我们调试程序的性能一般会使用Stopwatch,如果希望更加系统的了解程序,我们就需要用到”性能向导“,通过性能报告便于我们快速的发现并找到潜在的性能问题。首先我们上一段需要改进的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 us转载 2013-04-02 02:05:27 · 561 阅读 · 0 评论 -
async & await 的前世今生(Updated)2014-02-24 08:24 by Jesse Liu,
async & await 的前世今生(Updated)2014-02-24 08:24 by Jesse Liuasync 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了。但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug,转载 2014-05-12 16:46:42 · 607 阅读 · 0 评论