14.1 理解不同的并行技术

在这一节,我们将讨论三种技术,并使用简单的示例进行演示。我们将使用的 .NET并行扩展(Parallel Extensions to .NET),是并行编程库,它是 .NET Framework 4.0 标准的一部分,但是,不幸的是,在早期 .NET 的版本中没有。如果要在 Visual Studio 2008 中体验并行扩展,可以下载 CTP 版本,但有几个命名上的改变(实际上,Visual Studio 2010 应该没有这个问题了)。

.NET 的并行扩展(Parallel Extensions to .NET)

我们在这一章中会用到这个库的两个主要部分:

■ 任务并行库(Task Parallel Library,TPL),包括能够并行执行任务(基本工作单元,primitive units of work)的基础结构。TPL的另一个组件可以把常见的计算创建成任务,比如 for 循环。

■ 并行 LINQ (Parallel LINQ,PLINQ),可以用于写数据并行的代码。这种代码,能够使用相同的算法处理海量数据。

用于并行执行任务的底层技术,使用了源自微软研究院(MSR)的先进技术,完全用托管代码实现。它使用动态工作分配,即,根据线程的可用性,把任务分配到工作线程;线程完成了分配给自己的任务以后,就可以从其他线程中启动“窃取(stealing)”任务,所以,工作将在所有可用的处理器或内核之间均匀分布。任务以队列形式保存每个工作线程中,这也大大降低所需的同步和锁定的实现。

现在,我们介绍在概述中提到的内容:对处理数组的命令式代码进行并行化,这与纯函数式语言不相关,它不允许有任何副作用;但是,以函数风格处理数组,在 C# 和 F# 中都是很有用的技术,正如我们在第十章所看到的。

时间: 2024-10-08 04:40:37

14.1 理解不同的并行技术的相关文章

[.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术

[.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率. 本节将介绍如何利用缓存写出高效率的代码. 1. 什么是缓存(Cache)? 缓存(Cache)是一种用空间换取时间的技术 存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取. 比如CPU二级缓存.内存.windows文件读取缓存. 2. .NE

深入理解Mybatis原理与技术

目录 第1章 Mybatis简介 1.1 传统的JDBC编程 1.2 ORM模型 1.4 MyBatis 1.5 什么时候用MyBatis 第2章 MyBatis入门 2.2 MyBatis构成 2.3 SqlSession的作用 2.4 映射器 2.4.1 使用XML配置方式 2.4.2 使用注解的方式 2.4.3 MyBatis映射原理 2.5 生命周期 2.5.1 SqlSessionFactoryBuilder 2.5.2 SqlSessionFactory 2.5.3 SqlSessi

<14>【理解】整型变量修饰符介绍+【掌握】short、long对整型变量的修饰+

[理解]整型变量修饰符介绍 整型变量修饰符 改变整型变量占用的存储空间 int short long long long(32位系统下long是只占四个字节,long long占八个字节: 64位系统下long是占八个字节,long long也占八个字节,所以long long 是为32位系统发明的) 改变一个数的符号 signed unsignded [掌握]short.long对整型变量的修饰 #include <stdio.h> int main(int argc, const char

简单理解预加载技术

预加载原理就是在浏览器加载页面的时候先创建一个对象,然后填充数据,从而达到预先加载的效果.(即按照文档流顺序,先利用js加载函数去加载图片,然后在渲染dom元素) 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js预加载</title> </head> <script> //针对firefox window

《深入理解JavaScript系列》系列技术文章整理收藏

<深入理解JavaScript系列>系列技术文章整理收藏 深入理解JavaScript系列来自汤姆大叔的整理贴,原文地址http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 此处收藏供JavaScript学习参考 1深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2深入理解JavaScript系列(2):揭秘命名函数表达式 3深入理解JavaScript系列(3):全面解析Module模式

大开测试:性能- 如何理解Return的返回值(连载14)

7.14  如何理解Return的返回值 1.问题提出 在创建和录制脚本的时候,发现在脚本vuser_init.Action.vuser_end三部分中都会有一条"return 0;"语句,那么平时在编写脚本时如何应用return语句,return不同的返回值又有什么含义呢? 2.问题解答 Return表示一个过程的结束,在LoadRunner中用return根据脚本不同的返回值,表示脚本的成功或者失败."return +大于等于零的数字;"表示成功,反之,则表示失

MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术. 14.1 何谓数据切分 可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了,只不过在有些文章中称之为数据的 Sharding.其实不管是称之为数据的 Shard

【问底】夏俊:深入站点服务端技术(一)——站点并发的问题

url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2015-03-16%2F2824221&type=3&count=&appkey=&title=%E6%9C%AC%E6%96%87%E6%9D%A5%E8%87%AA%E6%8B%A5%E6%9C%89%E5%8D%81%E5%B9%B4IT%E4%BB%8E%E4%B8%9A%E7%BB%8F%E9%AA%8C%E3%80%81%E6%93%85%E9%95%BF%E7%BD%91%E

转一篇关于并发和并行概念的好文,附带大神评论

转自:https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/ 还在疑惑并发和并行? OK,如果你还在为并发(concurrency)和并行(parallesim)这两个词的区别而感到困扰,那么这篇文章就是写给你看的.搞这种词语辨析到底有什么意义?其实没什么意义,但是有太多人在混用错用这两个词(比如遇到的某门课的老师).不论中文圈还是英文圈,即使已经有数不清的文章在讨论并行vs并发,却极少有能讲清楚的.让一个讲不清楚的人来