搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
Windows并发编程指南
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787111288206
  • 作      者:
    (美)Joe Duffy著
  • 出 版 社 :
    机械工业出版社
  • 出版日期:
    2010
收藏
编辑推荐
  深入揭示Windows并发编程理论及实现
  微软首席研究与战略官Craig Mundie作序推荐
  《Windows并发编程指南》详尽地介绍了如何在开发软件时高效地使用并发和硬件并行,以及如何设计、实现和维护大型的,主要以Windows平台上的C#和C++等语言编写的并发程序。
  《Windows并发编程指南》为应用程序、系统以及库等的开发人员在多核处理器上编写高效、安全的代码提供必要的工具和技术指导。这不仅对于那些存在内在并发性的领域(如服务器应用、计算密集的图像处理、金融分析、数值模拟以及AI算法等)来说是很重要的,而且对于一些可以通过并行来获得加速的领域(如数学库、排序算法、报告生成、XML处理以及流式处理算法等)来说同样是重要的。
  《Windows并发编程指南》主要包括四部分:第一部分从高层视角介绍并发的一些基本概念;第兰部分重点介绍一些重要的平台功能、内部工作机制以及API细节等;第三部分介绍在编写并发软件时一些常见的编程模式、最优方法、算法和数据结构等;第四部分介绍在编写并发程序时需要注意的一些系统性的架构和流程方面的问题。
  要想学习在windows和.NET上进行并发编程的最优方法和通用模式,那么《Windows并发编程指南》将是你唯一需要的一《Windows并发编程指南》。
展开
作者简介
  杜飞(Joe Duffy),是微软公司.NET框架团队中负责并行扩展库(Parallel Extensions]的开发管、架构师和奠基人。除了编写代码和管理开发团队之外,他还致力于一些长期性和前瞻性的工作,例如支持并发安全性的语言和类型系统。他曾在通用语言运行时(CommonI Language Runtime)团队中工作过。
展开
内容介绍
  《Windows并发编程指南》详细讲述Windows并发编程的相关知识。内容分为四个部分:第一部分“概念”从高层视角介绍并发的基本概念,为读者理解并发打下基础:第二部分“机制”重点介绍了一些基础的功能、内部工作机制以及各种APl等;第三部分“技术”介绍了一些常见的编程模式、最优方法、算法,以及在编写并发软件时需要使用的各种数据结构;第四部分“系统”介绍了一些在系统架构和流程中经常出现的问题。
  《Windows并发编程指南》内容翔实,实例丰富,适合Windows开发人员、Windows测试人员;和Windows技术支持人员等参考。
展开
精彩书评
  “在程序中使用多线程时,简单明了的架构和设计是常重要的……这要求我们不仅要全面地理解平台的各项功能,而且还要随时关注一些新近出现的最优方法。Joe在本书中完美地阐述了并发的基本理论以及各种最优方法。”
  ——Craig Mundie,微软公司首席研究与战略官
展开
精彩书摘
  总的来说,许多问题都有内在的并发特性。例如,在构建一个服务器程序时,需要考虑到有许多请求会并发地到来,而服务器程序必须同时处理这些请求。如果正在编写处理Web请求的模块并且需要访问一些共享状态,那么也会发现需要处理与并发相关的问题。
  有时候,我们可以通过并发来将一些问题以更自然的方式表达出来,但在实际情况中却很少会使用并发。人们似乎正在经历一个需要面对大量异步性的困难时期,而这些异步性是随着各种交互操作的激增而带来的。于是,人们开始越来越多地使用并发,甚至在一些并不适合的情况中也使用并发。出现这种现象的原因是由于多处理器架构发生了重大的变化,各种主流计算机都在广泛地使用并行处理器。多核处理器已经占据了PC市场和移动市场,而高度并行的图形处理器(Graphics ProcessingUnit,GPU)也随处可见,有时候甚至用来执行普通的图形计算。为了最大限度发挥这些新型处理器的强大功能,我们必须以一种可伸缩的方式来编写程序。这就意味着在程序中必须包含足够的潜在并发(Latent Concurrency),这样当采用更新的机器时,这些潜在的并发将变成真实的并发,而程序的性能也将自动提升。
  事实上,尽管我们大多数人都习惯以串行方式来编写程序,但在代码中经常会包含大量的潜在并发,这些并发是由于我们所选择的编程语言而带来的。在许多情况下,循环、if分支和内存移动中包含的数据依赖性和控制依赖性将限制这种并发,这些限制都是在一些不符合C编程风格的代码上施加的人为限制。
  相对于过去的编程方式来说,并发是一种重大的变化,对于客户端程序来说尤其如此。并行是指通过并发将一个操作分解为一组粒度更细的子操作,并且这些子操作可以在不同的处理器上独立运行。这种思想并非最近才出现的。早在数十年前,在科学计算和超级计算机中已经通过并行在数十个、数百个,甚至数千个处理器上获得可伸缩性。然而,一些主流的商业软件和Web软件通常是采用串行方式来编写的,因为这些软件的开发商认为CPU的时钟速度每年都会提升40%~50%,而因此带来的程序性能提升足以满足将来的需求。
  1.2 程序架构与并发
  我们首先从程序架构开始来讨论并发。当我们可以在现有的程序中增加并发性时,如果预先仔细地进行设计,那么将极大降低一些常见缺陷的出现概率。下面这些术语对于构思并发程序的结构来说是非常有用的,它们在项目的初始设计阶段将带来极大的帮助:
  ·代理(Agent)。大多数程序都可以分解为一些独立的代理。在这里,代理是一个非常抽象的术语,它包含一些关键的属性:1)代理的状态自始至终都包含在代理的内部;2)代理与外部环境的交互过程是异步的;3)在同级代理之间的关系通常是松散耦合的。在真实的系统中,代理的表现形式有多种,如Web请求、Windows基础通信层(Windows Communication Foundation,
  WCF)的服务请求、COM组件调用,以及线程中的异步行为等。而且,在一些程序中只存在一个代理,即程序的入口点。
展开
目录
对本书的赞誉
译着序

前言
致谢
作者简介
第一部分 概念
第1章 概述
1.1 为什么需要并发
1.2 程序架构与并发
1.3 并行的层次
1.4 为什么不需要并发
1.5 小结
延伸阅读

第2章 同步与时间
2.1 程序状态的管理
2.1.1 共享状态与私有状态的区分
2.1.2 状态机与时间
2.1.3 独立性
2.1.4 不变性
2.2 同步:种类与实现技术
2.2.1 数据同步
2.2.2 协作与控制同步
2.3 小结
延伸阅读

第二部分 机制
第3章 线程
3.1 从高层面上来看线程
3.1.1 Windows线程是什么
3.1.2 CLR线程是什么
3.1.3 显式线程操作及其替代方法
3.2 线程的诞生与消亡
3.2.1 线程的创建
3.2.2 线程终止
3.2.3 DllMain
3.2.4 线程局部存储
3.3 小结
延伸阅读

第4章 线程的高级内容
4.1 线程的状态
4.1.1 用户态线程栈
4.1.2 内部数据结构(KTHREAD、ETHREAD和TEB)
4.1.3 上下文
4.2 线程的创建过程与终止过程
4.2.1 线程创建的具体流程
4.2.2 线程终止的具体流程
4.3 线程调度
4.3.1 线程的状态
4.3.2 优先级
4.3.3 时间片
4.3.4 优先级与时间片调整
4.3.5 睡眠与退让
4.3.6 挂起
4.3.7 关联性:优先在某个CPU上运行
4.4 小结
延伸阅读

第5章 Windows内核同步机制
5.1 基础知识:触发和等待
5.1.1 为什么要使用内核对象
5.1.2 在非托管代码中执行等待操作
5.1.3 托管代码
5.1.4 异步过程调用
5.2 内核对象的使用
5.2.1 互斥体
5.2.2 信号量
5.2.3 互斥体/信号量使用示例:阻塞/有界的队列
5.2.4 自动重置事件和手动重置事件
5.2.5 等待定时器
5.2.6 触发对象与自动等待
5.2.7 内核对象的调试
5.3 小结
延伸阅读

第6章 数据同步与控制同步
6.1 互斥
6.1.1 Win32临界区
6.1.2 CLR锁
6.2 读/写锁(RWL)
6.2.1 WindowsVista中的轻量级读/写锁
6.2.2.NEI框架中的轻量级读/写锁
6.2.3.NET框架中原来的读/写锁
6.3 条件变量
6.3.1 WindowsVista条件变量
6.3.2.NET框架的Monitor
6.3.3 被守护区域
6.4 小结
延伸阅读

第7章 线程池
7.1 线程池的基本知识
7.1.1 三种方式:WindowsVista、Windows遗留代码以及CLR
7.1.2 通用功能
7.2 Windows线程池
7.2.1 WindowsVista线程池
7.2.2 遗留的Win32线程池
7.3 CLR线程池
7.3.1 工作项
7.3.2 I/O完成端口
7.3.3 定时器
7.3.4 注册等待
7.3.5 记住(再次提醒):你并不拥有这些线程
7.3.6 线程池的线程管理
7.3.7 调试
7.3.8 案例分析:优先级分层以及在线程池之上的隔离性
7.4 在使用线程池时的性能
7.5 小结
延伸阅读

第8章 异步编程模型
8.1 异步编程模型(APM)
8.1.1 汇集:四种方式
8.1.2 实现IAsyncResult
8.1.3 在.NET框架的哪些地方使用了APM
8.1.4 ASP.NET异步页
8.2 基于事件的异步模式
8.2.1 基础知识
8.2.2 支持取消
8.2.3 支持进度报告以及增量结果
8.2.4 在.NET框架的哪些地方将使用EAP
8.3 小结
延伸阅读

第9章 纤程
9.1 纤程简介优点与缺点
9.2 纤程的使用
9.2.1 创建新的纤程
9.2.2 将线程转换为纤程
9.2.3 判断线程是否为纤程
9.2.4 纤程间的切换
9.2.5 删除纤程
9.2.6 切换当前线程的示例
9.3 与纤程相关的其他主题
9.3.1 纤程局部存储
9.3.2 线程关联性
9.3.3 案例分析:纤程与CLR
9.4 构建用户态的调度器
9.4.1 实现
9.4.2 关于栈阻塞与无栈阻塞
9.5 小结
延伸阅读

第三部分 技术
第10章 内存模型与无锁编程
10.1 内存加载与存储等操作的重新排序
10.1.1 实际运行的顺序并非总是编写的顺序
10.1.2 将临界域作为栅栏
10.1.3 数据依赖性及其对重排的影响
10.2 硬件原子性
10.2.1 普通加载指令和存储指令的原子性
10.2.2 互锁操作
10.3 内存一致性模型
10.3.1 硬件内存模型
10.3.2 内存栅栏
10.3.3.NET内存模型
10.3.4 无锁编程
10.4 低锁代码的示例
10.4.1 延迟初始化与双重检查锁定
10.4.2 无阻塞栈和ABA问题
10.4.3 重新回顾Dekker的算法
10.5 小结
延伸阅读

第11章 并发的危害
11.1 正确性危害
11.1.1 数据竞争
11.1.2 递归与重入
11.1.3 锁与进程关闭
11.2 活跃性危害
11.2.1 死锁
11.2.2 遗失的唤醒
11.2.3 活锁
11.2.4 锁护送效应
11.2.5 “蜂拥”现象
11.2.6 两步舞
11.2.7 优先级反转与饥饿
11.3 小结
延伸阅读

第12章 并行容器
12.1 细粒度锁定
12.1.1 数组
12.1.2 FIFO队列
12.1.3 链表
12.1.4 字典(散列表)
12.2 无锁
12.2.1 无锁FIFO队列
12.2.2 工作密迁队列
12.3 协作式容器
12.3.1 生产者/消费者数据结构
12.3.2 通过栅栏来分阶段计算
12.4 小结
延伸阅读

第13章 数据并行与任务并行
13.1 数据并行
13.2 任务并行
13.2.1 分支/合并算法
13.2.2 数据流并行(Future抽象与Promise抽象)
13.2.3 递归
13.2.4 流水线
13.2.5 查找
13.3 基于消息的并行
13.4 一些共同问题
13.4.1 并发的异常
13.4.2 取消
13.5 小结
延伸阅读

第14章 性能与可伸缩性
14.1 并行硬件架构
14.1.1 SMP、CMP与HT
14.1.2 超标量执行
14.1.3 内存的层次结构
14.1.4 Visual Studio中的性能分析工具
14.2 加速比:并行代码与串行代码
14.2.1 决定“采用并行”
14.2.2 测量并行带来的性能提升
14.2.3 Amdahl定律
12.2.4 关键路径以及负载不均衡
14.2.5 垃圾收集与可伸缩性
14.3 自旋等待
14.3.1 如何在Windows上正确地自旋
14.3.2 纯自旋锁
14.3.3 Mellor-Crummey-Scott(MCS)锁
14.4 小结
延伸阅读

第四部分 系统
第15章 输入与输出
15.1 重叠I/O
15.1.1 重叠对象
15.1.2 Win32异步:I/O
15.1.3 .NET框架的异步I/O
15.2 I/O取消
15.2.1 当前线程的异步I/O取消
15.2.2 其他线程上的同步I/O取消
15.2.3 任意线程的异步I/O取消
15.3 小结
延伸阅读

第16章 图形用户界面
16.1 GUI线程模型
16.1.1 单线程套间(STA)
16.1.2 响应度:它是什么
16.2.NET异步GUI功能
16.2.1.NET的GUI框架
16.2.2 同步上下文
16.2.3 异步操作
16.2.4 一个方便的类:BackgroundWorker
16.3 小结
延伸阅读

第五部分 附录
附录A 为.NET并发程序设计可重用的库
附录B .NET的并行扩展
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证