C#并行编程高级教程:精通.NET 4 Parallel Extensions_.net4 parallel extension-程序员宅基地

技术标签: c#  C#  parallel  开发技术  .net  .NET  .Net  编程  任务  

 

基本信息
原书名: Professional Parallel Programming with C#: Master Parallel Extensions with .NET 4
原出版社: Wrox
作者: (美)Gaston Hillar    [作译者介绍]
译者: 郑思遥 房佩慈
出版社:清华大学出版社
ISBN:9787302273561
上架时间:2012-1-9
出版日期:2012 年1月
开本:16开
页码:487
版次:1-1

样章试读:http://www.china-pub.com/computers/common/mianfeisd.asp?id=59001

内容简介:

       您想淋漓尽致地发挥多核计算机系统的处理能力吗?《c#并行编程高级教程:精通.net 4 parallel extensions》将帮助您实现这一夙愿。这本精品书籍浓墨重彩地描述如何使用c# 4、visual studio 2010和.net framework 4高效地创建基于任务的并行应用程序,详细讲述最新的单指令、多数据流指令和向量化等并行编程技术,介绍现代并行库,讨论如何珠联璧合地使用高级intel工具与c#,并指导您巧妙使用新引入的轻型协调结构来开发自己的解决方案并解决最棘手的并发编程问题。
  主要内容
  介绍如何基于新task parallel library和.net 4设计稳定的可扩展并行应用程序。
  讲解命令式数据并行、命令式任务并行、并发集合以及协调数据结构。
  描述plinq高级声明式数据并行。
  讨论如何使用新的visual studio 2010并行调试功能来调试匿名方法、任务和线程。
  演示如何对数据源进行分区,以便在不同任务和线程之间合理分配工作负荷。

 

 作者介绍:

Gastón C. Hillar是一位独立软件咨询师,自1997年起便一直从事并行编程、多处理器和多核领域的研究,Gastón拥有使用C#.NET Framework来设计和开发各种复杂并行解决方案的丰富经验,曾于2009年荣膺Intel Black Belt Software Developer奖。

目录回到顶部↑

《c#并行编程高级教程精通.net 4 parallel extensions》
第1章 基于任务的程序设计 1
1.1 使用共享内存的多核系统 2
1.1.1 共享内存多核系统与分布式内存系统之间的区别 3
1.1.2 并行程序设计和多核程序设计 4
1.2 理解硬件线程和软件线程 5
1.3 理解amdahl法则 8
1.4 考虑gustafson法则 11
1.5 使用轻量级并发模型 14
1.6 创建成功的基于任务的设计 15
1.6.1 以并发的思想指导设计 16
1.6.2 理解交错并发、并发和并行之间的区别 17
1.6.3 并行化任务 18
1.6.4 尽量减少临界区 18
1.6.5 理解多核并行程序的设计原则 19
1.7 为numa架构和更高的可扩展性做好准备 20
1.8 判断是否适合并行化 24
1.9 小结 25
第2章 命令式数据并行 27
2.1 加载并行任务 27
.2.1.1 system.threading.tasks.parallel类 29
2.1.2 parallel.invoke 30
2.2 将串行代码转换为并行代码 37
2.2.1 检测可并行化的热点 37
2.2.2 测量并行执行的加速效果 40
2.2.3 理解并发执行 42
2.3 循环并行化 43
2.3.1 parallel.for 43
2.3.2 parallel.foreach 49
2.3.3 从并行循环中退出 56
2.4 指定并行度 62
2.4.1 paralleloptions 63
2.4.2 计算硬件线程 65
2.4.3 逻辑内核并不是物理内核 66
2.5 通过甘特图检测临界区 67
2.6 小结 68
第3章 命令式任务并行 69
3.1 创建和管理任务 70
3.1.1 system.threading.tasks.task 71
3.1.2 理解task状态和生命周期 72
3.1.3 通过使用任务来对代码进行并行化 74
3.1.4 等待任务完成 80
3.1.5 忘记复杂的线程 81
3.1.6 通过取消标记取消任务 82
3.1.7 从任务返回值 88
3.1.8 taskcreationoptions 90
3.1.9 通过延续串联多个任务 90
3.1.10 编写适应并发和并行的代码 95
3.2 小结 96
第4章 并发集合 97
4.1 理解并发集合提供的功能 98
4.1.1 system.collections.concurrent 100
4.1.2 concurrentqueue 101
4.1.3 理解并行的生产者-消费者模式 104
4.1.4 concurrentstack 116
4.1.5 将使用数组和不安全集合的代码转换为使用并发集合的代码 121
4.1.6 concurrentbag 122
4.1.7 iproducerconsumer
collection 129
4.1.8 blockingcollection 129
4.1.9 concurrentdictionary 143
4.2 小结 147
第5章 协调数据结构 149
5.1 通过汽车和车道理解并发难题 150
5.1.1 非预期的副作用 150
5.1.2 竞争条件 151
5.1.3 死锁 152
5.1.4 使用原子操作的无锁算法 153
5.1.5 使用本地存储的无锁算法 154
5.2 理解新的同步机制 156
5.3 使用同步原语 157
5.3.1 通过屏障同步并发任务 158
5.3.2 屏障和continuewhenall 164
5.3.3 在所有的参与者任务中捕捉异常 165
5.3.4 使用超时 166
5.3.5 使用动态数目的参与者 171
5.4 使用互斥锁 172
5.4.1 使用monitor 176
5.4.2 使用锁超时 177
5.4.3 将代码重构为避免使用锁 180
5.5 将自旋锁用作互斥锁原语 183
5.5.1 使用超时 186
5.5.2 使用基于自旋的等待 187
5.5.3 自旋和处理器出让 190
5.5.4 使用volatile修饰符 193
5.6 使用轻量级的手动重置事件 194
5.6.1 使用manualreseteventslim进行自旋和等待 194
5.6.2 使用超时和取消 199
5.6.3 使用manualresetevent 203
5.7 限制资源的并发访问 204
5.7.1 使用semaphoreslim 205
5.7.2 使用超时和取消 209
5.7.3 使用 semaphore 209
5.8 通过countdownevent简化动态fork和join场景 211
5.9 使用原子操作 215
5.10 小结 220
第6章 plinq:声明式数据并行 221
6.1 从linq转换到plinq 222
6.1.1 parallelenumerable及其asparallel方法 224
6.1.2 asordered和orderby子句 225
6.2 指定执行模式 228
6.3 理解plinq中的数据分区 229
6.4 通过plinq执行归约操作 234
6.5 创建自定义的plinq聚合函数 235
6.6 并发plinq任务 240
6.7 取消plinq 243
6.8 指定所需的并行度 245
6.8.1 withdegreeofparallelism 245
6.8.2 测量可扩展性 247
6.9 使用forall 249
6.9.1 foreach和forall的区别 250
6.9.2 测量可扩展性 251
6.10 通过withmergeoptions配置返回结果的方式 253
6.11 处理plinq抛出的异常 255
6.12 使用plinq执行mapreduce算法 257
6.13 使用plinq设计串行多步操作 259
6.14 小结 261
第7章 visual studio 2010的任务调试能力 263
7.1 充分利用多显示器的支持 264
7.2 理解并行任务调试器窗口 267
7.3 查看parallel stacks图 273
7.4 跟踪并发代码 280
7.4.1 调试匿名方法 288
7.4.2 查看方法 290
7.4.3 在源代码中查看线程 292
7.5 检测死锁 294
7.6 小结 300
第8章 线程池 301
8.1 探究任务的底层技术 301
8.2 理解新的clr 4线程池引擎 303
8.2.1 理解全局队列 303
8.2.2 等待工作线程完成工作 313
8.2.3 跟踪动态数目的工作线程 319
8.2.4 使用任务(而不是线程)将作业加入队列 323
8.2.5 理解任务和线程池之间的关系 326
8.2.6 理解局部队列和工作窃取算法 330
8.2.7 指定自定义的任务调度器 335
8.3 小结 340
第9章 异步编程模型 341
9.1 结合使用异步编程和任务 342
9.1.1 使用taskfactory.fromasync 343
9.1.2 编写异步方法执行结束之后的延续 348
9.1.3 合并多个并发异步操作的结果 349
9.1.4 执行异步wpf ui更新 351
9.1.5 执行异步windows forms ui更新 358
9.1.6 创建执行eap操作的任务 365
9.1.7 使用taskcompletionsource 373
9.2 小结 377
第10章 并行测试和调优 379
10.1 准备并行测试 379
10.1.1 使用性能剖析功能 383
10.1.2 测量并发性 385
10.2 常见问题模式的解决方案 394
10.2.1 串行化的执行 395
10.2.2 锁争用 397
10.2.3 锁封护 398
10.2.4 申请超额 401
10.2.5 申请不足 404
10.2.6 分区问题 406
10.2.7 工作站垃圾回收开销 408
10.2.8 使用服务器垃圾回收 411
10.2.9 i/o瓶颈 412
10.2.10 主线程过载 413
10.3 理解伪共享 416
10.4 小结 419
第11章 向量化、simd指令以及其他并行库 421
11.1 理解simd和向量化 421
11.2 从mmx到sse4.x和avx 423
11.3 使用intel math kernellibrary 425
11.3.1 使用适用于多核的高度优化的软件函数 433
11.3.2 将基于任务的编程和外部优化的库混合使用 434
11.3.3 并行生成伪随机数 434
11.4 使用intel integratedperformance primitives 439
11.5 小结 445
附录a .net 4中与并行相关的类图 447
附录b 并发uml模型 461
附录c parallel extensions extras 469

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qinghuawenkang/article/details/7563890

智能推荐

Linux 管理联网 nmcli常用命令_nmcli c-程序员宅基地

文章浏览阅读1.3k次。修改IP (modify) 停止连接 (down) 删除连接(delete) 连接生效(三种方式) 重新加载配置文件(load reload)_nmcli c

MPAndroidChart之LineChart使用_mpachart折线图设置虚线-程序员宅基地

文章浏览阅读5.5k次。1.写在前面我很纠结着标题该怎么取,因为对于这个图表框架我只使用了linechart,但是用的非常非常的多,公司很多地方都是折线图。因为项目有关折线图的功能基本都完了,所以抽出一部分东西出来记录下来。这里抽出的效果图如下: 领导具体的要求有这么几点: 1. 第一个折线图表示实时功率,后面的月 年 总体都是发电量,并且日实时功率要充满(就是fill),其他的不用; 2. 日实时功率图表_mpachart折线图设置虚线

深入理解SELinux SEAndroid(3最后部分)_restorecon lsetfileconon read-only file system-程序员宅基地

文章浏览阅读947次。深入理解SELinux SEAndroid(结局) 二 SEAndroid源码分析有了上文的SELinux的基础知识,本节再来看看Google是如何在Android平台定制SELinux的。如前文所示,Android平台中的SELinux叫SEAndroid。先来看SEAndroid安全策略文件的编译。 1. 编译sepolicy Android平台中:_restorecon lsetfileconon read-only file system

ESP8266-Arduino网络编程实例-异步TCP服务器(基于热点模式+DNS)_esp8266 tcp server arduino-程序员宅基地

文章浏览阅读1.6k次。在本实例中,将实现如何在热点模式下实现异步TCP服务器。_esp8266 tcp server arduino

这一篇说明spring的一些基础问题问题-程序员宅基地

文章浏览阅读552次。1 spring概述它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。Spring是一个轻量级Java开发框架Spring设计目标:Spring为开发者提供一个一站式轻量级应用开发平台;但是 Spring 仍然可以和其他的框架无缝整合。Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。Spring所有的功能 的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented

【Android】用Android Studio将项目打包成apk_将androidstudio的项目打包apk-程序员宅基地

文章浏览阅读608次。1、Build——Generate Signed Bundle or APK这里不是mykey,而是android.keystore2、_将androidstudio的项目打包apk

随便推点

unity入门教程(非常详细)从零基础入门到精通,看完这一篇就够了_unity从零开始-程序员宅基地

文章浏览阅读297次。在新建完成后会在创建的目录下生成相关工程文件如图所示:Assets: 资源(场景脚本模型)Library: 库(系统)Logs: 日志Packages: 导入的包ProjectSettings: 工程设置Temp: 临时文件(文件过大可以删除部分缓存)UserSettings: 设置。_unity从零开始

A Bug's Life-HDU-1829_a bug's life hdu - 1829-程序员宅基地

文章浏览阅读823次。题目地址:hdu-1829 本题是考察并查集的运用。 **题意:有k对编号为1~n的果蝇交配了, 给你数据后让你判断是否有同性恋。**Problem Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that th_a bug's life hdu - 1829

论文阅读 (33): Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Net_deep convolution generative adversarial networks论文-程序员宅基地

文章浏览阅读3.8k次,点赞6次,收藏13次。论文题目:Unsupervised representation learning with deep convolutional generative adversarial networks  Torch地址:https://github.com/pytorch/examples/tree/master/dcgan  摘要:近年来,基于卷积神经网络 (CNN) 的监督学习广泛应用于计算机视觉领域。然,无监督CNN却鲜有关注。本文希冀在无监督学习和有监督学习之间建立CNN桥梁,并引入深度卷积生成对抗_deep convolution generative adversarial networks论文地址

android studio编程时出现的错误:Cannot get property 'XXXX' on extra properties extension as it does not exist_cannot get property 'android' on extra properties -程序员宅基地

文章浏览阅读3.5w次,点赞4次,收藏4次。用Android Studio中导入第三方库工程的时候出现的问题:Error:(28, 0) Cannot get property 'junitVersion' on extra properties extension as it does not exist出现这种问题原因是第三方库工程 引用了 自定义的 junitVersion 这个名字的ext;因此在该项目的根目录那_cannot get property 'android' on extra properties extension as it does not e

electron开发记录(三):应用基本框架解析_electron 工程结构-程序员宅基地

文章浏览阅读8k次。这篇文章主要讲了electron应用的基本架构,并对之前下载的应用进行分析electron应用的基本架构在electron中,主要有两类进程。一类是主进程main,还有一类是渲染器进程renderer。主进程只有一个,负责对整个应用的管理,包括后台操作,创建GUI,以及处理GUI与后台的交互操作。但是光有主进程是无法显示应用窗口的,我们需要在主进程中调用BrowserWindow模块才能使用不同的窗_electron 工程结构