C#并行编程--并行任务
2012-06-01 16:03
169 查看
并行任务的概念(from msdn)任务并行库 (TPL) 基于任务的概念。 术语“任务并行”是指一个或多个独立的任务同时运行。 任务表示异步操作,在某些方面它类似于创建新线程或 ThreadPool 工作项,但抽象级别较高。 任务提供两个主要好处:系统资源的使用效率更高,可伸缩性更好。在后台,任务排队到 ThreadPool,ThreadPool 已使用登山等算法进行增强,这些算法能够确定并调整到可最大化吞吐量的线程数。 这会使任务相对轻量,您可以创建很多任务以启用细化并行。 为了补偿这一点,可使用众所周知的工作窃取算法提供负载平衡。对于线程或工作项,可以使用更多的编程控件。任务和围绕它们生成的框架提供了一组丰富的 API,这些 API 支持等待、取消、继续、可靠的异常处理、详细状态、自定义计划等功能。出于这两个原因,在 .NET Framework 4 中,任务是用于编写多线程、异步和并行代码的首选 API。创建和运行任务的两种方式1.隐式创建并运行任务Parallel.Invoke(),这个方法提供隐式创建任务并且直接运行,参数就是Action,而且可以是多个Action方法有几种代码可以实现
1. Parallel.Invoke(() => { Console.WriteLine("test"); }); 2. Parallel.Invoke(Sum1, Sum2); 3. Parallel.Invoke(()=> Sum1()); //Sum1是方法名称2.显式创建和运行任务
1.创建任务和运行任务分开执行的方式。先创建Task,然后调用Start开始 Task t = new Task(Sum1); t.Start(); 2,创建任务和运行任务一起执行的方式。 Task.Factory.StartNew(Action action )显式和隐式创建任务不仅仅是代码方式的不同,最大的不同在于Paralle.Invoke执行并行方法以后是要等待方法执行完毕的并返回的Task创建的任务是异步执行,不等待任务执行完毕的。所以Parallel.Invoke相当于Task开始执行以后调用Task.Wait()这个方法。比如
//Sum1执行一段耗时方法,然后输出结果 Parallel.Invoke(Sum1) Console.WriteLine("......................."); 这个方法会先输出Sum1的结果,然后才输出“。。。。。。。。。。。” Task t = new Task(Sum1); t.Start(); Console.WriteLine("......................."); 这个方法会先输出".............." 然后才输出Sum1的结果在任务中返回结果在Task中返回结果比较简单使用Task<Result> 就可以返回结果
Task<int> task1 = Task<int>.Factory.StartNew(() => 1); int i = task1.Result; Task<Test> task2 = Task<Test>.Factory.StartNew(() => { string s = ".NET"; double d = 4.0; return new Test { Name = s, Number = d }; }); Test test = task2.Result;
相关文章推荐
- C#并行编程--并行任务
- 教你用一行Python代码实现并行任务(附代码)
- C#读书笔记之并行任务
- 并行计算中,借助参数--myid--把多个计算任务分配给numprocs个进程
- VS2010中的任务并行
- mysql-5.7 innodb 的并行任务调度详解
- iOS中多线程知识总结:进程、线程、GCD、串行队列、并行队列、全局队列、主线程队列、同步任务、异步任务等(有示例代码)
- IOS串行队列、并行队列进行同步或者异步任务解析
- .Net并行编程 - 并行任务基础知识
- hive实现任务并行执行
- Java并行编程–从并行任务集获取反馈
- 多线程编程学习笔记——任务并行库(二)
- 任务并行1
- 一些关于并行任务调度的实验
- 数据任务并行计算研究
- C#并行开发中的任务并行(一)
- iOS学习笔记74-IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别附代码
- C#命令式任务并行开发
- KETTLE 并行任务设置
- 让一切“并行”——任务并行库原理及应用