Previous Next

C并发编程经典实例 (图灵程序设计丛书) ([美]克利里(Stephen Cleary)) (z-library.sk, 1lib.sk, z-lib.sk)

Author: [美]克利里(Stephen Cleary)

C/C++/C#

No Description

📄 File Format: PDF
💾 File Size: 3.4 MB
14
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
(This page has no text content)
📄 Page 2
版权信息 书名:C#并发编程经典实例 作者:Stephen Cleary 译者:相银初 ISBN:978-7-115-37427-1 本书由北京图灵⽂化发展有限公司发⾏数字版。版权所有,侵权必 究。 您购买的图灵电⼦书仅供您个⼈使⽤,未经授权,不得以任何⽅式复 制和传播本书内容。 我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产 权。 如果购买者有侵权⾏为,我们可能对该⽤户实施包括但不限于关闭该 帐号等维权措施,并可能追究法律责任。 图灵社区会员 ptpress(libowen@ptpress.com.cn) 专享 尊重版权
📄 Page 3
版权声明 O'Reilly Media, Inc.介绍 业界评论 译者序 关于并发编程的⼏个误解 误解⼀:并发就是多线程 误解⼆:只有⼤型服务器程序才需要考虑并发 误解三:并发编程很复杂,必须掌握很多底层技术 本书的特⾊ 翻译中的⼀点感受 感谢 前⾔ 本书读者对象 本书写作初衷 内容速览 ⽹上资料 排版规范 Safari® Books Online 联系我们 致谢 第 1 章 并发编程概述 1.1 并发编程简介 1.2 异步编程简介 1.3 并⾏编程简介 1.4 响应式编程简介 1.5 数据流简介 1.6 多线程编程简介 1.7 并发编程的集合
📄 Page 4
1.8 现代设计 1.9 技术要点总结 第 2 章 异步编程基础 2.1 暂停⼀段时间 2.2 返回完成的任务 2.3 报告进度 2.4 等待⼀组任务完成 2.5 等待任意⼀个任务完成 2.6 任务完成时的处理 2.7 避免上下⽂延续 2.8 处理async Task⽅法的异常 2.9 处理async void⽅法的异常 第 3 章 并⾏开发的基础 3.1 数据的并⾏处理 3.2 并⾏聚合 3.3 并⾏调⽤ 3.4 动态并⾏ 3.5 并⾏LINQ 第 4 章 数据流基础 4.1 链接数据流块 4.2 传递出错信息 4.3 断开链接 4.4 限制流量 4.5 数据流块的并⾏处理 4.6 创建⾃定义数据流块 第 5 章 Rx基础 5.1 转换.NET事件 5.2 发通知给上下⽂
📄 Page 5
5.3 ⽤窗⼝和缓冲对事件分组 5.4 ⽤限流和抽样抑制事件流 5.5 超时 第 6 章 测试技巧 6.1 async⽅法的单元测试 6.2 预计失败的async⽅法的单元测试 6.3 async void⽅法的单元测试 6.4 数据流⽹格的单元测试 6.5 Rx Observable对象的单元测试 6.6 ⽤虚拟时间测试Rx Observable对象 第 7 章 互操作 7.1 ⽤async代码封装Async⽅法与Completed事件 7.2 ⽤async代码封装Begin/End⽅法 7.3 ⽤async代码封装所有异步操作 7.4 ⽤async代码封装并⾏代码 7.5 ⽤async代码封装Rx Observable对象 7.6 ⽤Rx Observable对象封装async代码 7.7 Rx Observable对象和数据流⽹格 第 8 章 集合 8.1 不可变栈和队列 8.2 不可变列表 8.3 不可变Set集合 8.4 不可变字典 8.5 线程安全字典 8.6 阻塞队列 8.7 阻塞栈和包 8.8 异步队列 8.9 异步栈和包
📄 Page 6
8.10 阻塞/异步队列 第 9 章 取消 9.1 发出取消请求 9.2 通过轮询响应取消请求 9.3 超时后取消 9.4 取消async代码 9.5 取消并⾏代码 9.6 取消响应式代码 9.7 取消数据流⽹格 9.8 注⼊取消请求 9.9 与其他取消体系的互操作 第 10 章 函数式OOP 10.1 异步接⼝和继承 10.2 异步构造:⼯⼚ 10.3 异步构造:异步初始化模式 10.4 异步属性 10.5 异步事件 10.6 异步销毁 第 11 章 同步 11.1 阻塞锁 11.2 异步锁 11.3 阻塞信号 11.4 异步信号 11.5 限流 第 12 章 调度 12.1 调度到线程池 12.2 任务调度器 12.3 调度并⾏代码
📄 Page 7
12.4 ⽤调度器实现数据流的同步 第 13 章 实⽤技巧 13.1 初始化共享资源 13.2 Rx延迟求值 13.3 异步数据绑定 13.4 隐式状态 封⾯介绍
📄 Page 8
版权声明 © 2014 by O'Reilly Media, Inc. Simplified Chinese Edition, jointly published by O'Reilly Media, Inc. and Posts & Telecom Press, 2015. Authorized translation of the English edition, 2014 O'Reilly Media, Inc., the owner of all rights to publish and sell the same. All rights reserved including the rights of reproduction in whole or in part in any form. 英⽂原版由O'Reilly Media, Inc. 出版,2014。 简体中⽂版由⼈⺠邮电出版社出版, 2015。英⽂原版的翻译得到 O'Reilly Media, Inc.的授权。此简体中⽂版的出版和销售得到出版权和 销售权的所有者 —— O'Reilly Media, Inc. 的许可。 版权所有,未得书⾯许可,本书的任何部分和全部不得以任何形式重 制。
📄 Page 9
O'Reilly Media, Inc.介绍 O'Reilly Media 通过图书、杂志、在线服务、调查研究和会议等⽅式传 播创新知识。⾃1978 年开始,O'Reilly ⼀直都是前沿发展的⻅证者和 推动者。超级极客们正在开创着未来,⽽我们关注真正重要的技术趋 势——通过放⼤那些“细微的信号”来刺激社会对新科技的应⽤。作为 技术社区中活跃的参与者,O'Reilly 的发展充满了对创新的倡导、创 造和发扬光⼤。 O'Reilly 为软件开发⼈员带来⾰命性的“动物书”;创建第⼀个商业⽹站 (GNN);组织了影响深远的开放源代码峰会,以⾄于开源软件运动 以此命名;创⽴了Make 杂志,从⽽成为DIY ⾰命的主要先锋;公司 ⼀如既往地通过多种形式缔结信息与⼈的纽带。O'Reilly 的会议和峰 会集聚了众多超级极客和⾼瞻远瞩的商业领袖,共同描绘出开创新产 业的⾰命性思想。作为技术⼈⼠获取信息的选择,O'Reilly 现在还将 先锋专家的知识传递给普通的计算机⽤户。⽆论是通过书籍出版,在 线服务或者⾯授课程,每⼀项O'Reilly 的产品都反映了公司不可动摇 的理念——信息是激发创新的⼒量。
📄 Page 10
业界评论 “O'Reilly Radar 博客有⼝皆碑。” ——Wired “O'Reilly 凭借⼀系列(真希望当初我也想到了)⾮凡想法建⽴了数百 万美元的业务。” ——Business 2.0 “O'Reilly Conference 是聚集关键思想领袖的绝对典范。” ——CRN “⼀本O'Reilly 的书就代表⼀个有⽤、有前途、需要学习的主题。” ——Irish Times “Tim 是位特⽴独⾏的商⼈,他不光放眼于最⻓远、最⼴阔的视野并且 切实地按照Yogi Berra 的建议去做了:‘如果你在路上遇到岔路⼝,⾛ ⼩路(岔路)。'回顾过去Tim 似乎每⼀次都选择了⼩路,⽽且有⼏次 都是⼀闪即逝的机会,尽管⼤路也不错。” ——Linux Journal
📄 Page 11
译者序 关于并发编程的⼏个误解 关于并发编程,很多⼈都有⼀些误解。 误解⼀:并发就是多线程 实际上多线程只是并发编程的⼀种形式,在C# 中还有很多更实⽤、更 ⽅便的并发编程技术,包括异步编程、并⾏编程、TPL 数据流、响应 式编程等。 误解⼆:只有⼤型服务器程序才需要考虑并发 服务器端的⼤型程序要响应⼤量客户端的数据请求,当然要充分考虑 并发。但是桌⾯程序和⼿机、平板等移动端应⽤同样需要考虑并发编 程,因为它们是直接⾯向最终⽤户的,⽽现在⽤户对使⽤体验的要求 越来越⾼。程序必须能随时响应⽤户的操作,尤其是在后台处理时 (读写数据、与服务器通信等),这正是并发编程的⽬的之⼀。 误解三:并发编程很复杂,必须掌握很多底层技术 C# 和.NET 提供了很多程序库,并发编程已经变得简单多了。尤其 是.NET 4.5 推出了全新的async 和await 关键字,使并发编程的代码减 少到了最低限度。并⾏处理和异步开发已经不再是⾼⼿们的专利,只 要使⽤本书中的⽅法,每个开发⼈员都能写出交互性良好、⾼效、可 靠的并发程序。
📄 Page 12
本书的特⾊ 本书全⾯讲解C# 并发编程技术,侧重于.NET 平台上较新、较实⽤的 ⽅法。全书分为⼏⼤部分:⾸先介绍⼏种并发编程技术,包括异步编 程、并⾏编程、TPL 数据流、响应式编程等;然后是⼀些重要的知识 点,包括测试技巧、互操作、取消并发、函数式编程与OOP、同步、 调度等;最后介绍了⼏个实⽤技巧。书中包含70 多个配有源码的实⽤ ⽅法,可⽤于服务器程序、桌⾯程序和移动端应⽤的开发。 本书填补了⼀个市场空⽩:它是⼀本⽤最新⽅法进⾏并发编程的⼊门 指引和参考书。 本书作者Stephen Cleary 是美国著名的软件开发者和技术书作家、C# MVP,在C#/C++/JavaScript 等⽅⾯均有丰富的经验。我⾮常有幸能翻 译他的著作。
📄 Page 13
翻译中的⼀点感受 过去的⼗多年我⼀直在从事软件开发和设计⼯作。相信国内很多开发 ⼈员都和我⼀样,⼼中存在着⼀个疑惑:我国的软件⼈员很多(绝对 数量不会⽐美国少),但为什么软件技术总体上落后欧美国家那么 多?确定翻译《C# 并发编程经典实例》这本书后,我⼀边仔细阅读原 书,⼀边遵循作者的思路,逐渐发现作者思考问题的⼀个理念。这就 是按软件的不同层次进⾏明确分⼯,我只负责我所实现的这个层次, 底层技术是为上层服务的,我只负责选择和调⽤,不管内部的实现过 程;同样,我负责的层次为更⾼⼀层的软件提供服务,供上层调⽤, 也不需要上层关⼼我的内部实现。 由此想到,这正好反映出国内开发⼈员中的⼀个通病,即分⼯不够 细、技术关注不够精。很多公司和团队在开发时都喜欢⼤包⼤揽,从 底层到应⽤层全部⾃⼰实现;很多开发⼈员也热衷于“⼤⽽全”地学习 技术,试图掌握软件开发中的各种技术,⽽不是精通某⼀⽅⾯。甚⾄ 流⾏这样⼀种观点,实现底层软件、写驱动的才是⾼级开发⼈员,做 上层应⽤的⼈仅仅是“码农”。本书作者明确地反对了这种看法,书中 强调如何利⽤好现成的库,⽽不是全部采⽤底层技术⾃⼰实现。利⽤ 现成的库开发出⾼质量的软件,对技术能⼒的考验并不低于开发底层 库。
📄 Page 14
感谢 在本书的翻译过程中,得到了图灵公司李松峰⽼师的⽀持和帮助,在 此表⽰感谢。由于本⼈⽔平有限,书中难免有疏忽和错误,恳请读者 朋友们批评指正。 2014 年10 ⽉于深圳
📄 Page 15
前⾔ 我觉得封⾯上的动物(麝⾹猫)能体现出本书的主题。在看到这个封 ⾯之前,我对这种动物⼀⽆所知,因此特意查了⼀下。麝⾹猫会在天 花板和阁楼上随处便溺,并且在最不合时宜的情况下互相打⽃发出很 ⼤的噪⾳,因此被认为是⼀种害兽。它们肛门处的⽓味腺会分泌⼀种 令⼈作呕的分泌物。在动物保护分类中,麝⾹猫属于“⽆危物种”,这 相当于说“⼈们可以随意捕杀,没⼈会在乎”。麝⾹猫喜欢吃咖啡果, 并且吃完咖啡⾖之后不消化,⼜排泄出来。世界上最贵的咖啡之⼀ ——猫屎咖啡,就是⽤麝⾹猫排泄出的咖啡⾖制造的。美国特种咖啡 协会称“这种咖啡味道好极了”。 这些特征使麝⾹猫成为代表并发和多线程开发的完美吉祥物。软件开 发新⼿会⾮常讨厌并发和多线程,它们会让原本整洁的代码变得乱七 ⼋糟。竞态条件(race condition)和其他莫名其妙的原因会导致程序 严重崩溃(经常在实际产品或演⽰程序中出现)。有些⼈甚⾄声称“多 线程是魔⿁”,并且完全不使⽤并发编程。有少数开发⼈员已经对并发 编程产⽣兴趣,并毫不畏惧地使⽤它。但⼤多数开发⼈员曾被并发编 程搞晕,并且留下了不好的印象。 然⽽,并发性正在成为现代程序的⼀个必备特性。今天的软件⽤户要 求程序界⾯在任何时候都不能停⽌响应;另外,服务器应⽤的规模变 得越来越⼤。并发编程顺应了这两种变化趋势。 幸好,已经有很多现代的程序库,使并发编程变得⽐以前简单多了! 并⾏处理和异步开发,不再是⾼⼿们的专利。这些程序库使⽤更⾼层 次的抽象化,让每⼀个开发⼈员都能开发出具有很好的响应性和可扩 展性的程序。如果在并发编程还⾮常困难的时候你曾经感到困惑,我
📄 Page 16
建议你⽤现代⼯具重新试⼀下。我们不能说并发编程很容易,但确实 不像以前那么难了。
📄 Page 17
本书读者对象 本书⾯向希望学习最新并发编程⽅法的开发⼈员。你需要熟练掌 握.NET开发,包括泛型集合(generic collection)、枚举 (enumerable)和LINQ。你不需要具备任何多线程或异步开发的知 识。本书介绍新的、更安全、更易使⽤的程序库,因此如果你已有这 ⽅⾯的经验,读这本书也会有所帮助。 并发编程适⽤于所有程序。不管是桌⾯程序、移动应⽤还是服务器应 ⽤,现在并发性⼏乎是所有程序的必备特性。利⽤本书提供的⽅法, 可以提⾼⽤户界⾯的响应速度和服务器应⽤的可扩展性。现在,并发 编程已经⾮常普遍,对⼀个专业开发⼈员来说,掌握并使⽤有关技术 ⾮常必要。
📄 Page 18
本书写作初衷 在我职业⽣涯的早期,我费了很⼤⼒⽓学习多线程开发。⼏年后,我 ⼜费了很⼤⼒⽓学习异步开发。尽管那些经验很有价值,但我仍然很 希望当时就能有今天的⼯具和资源。尤其是现在的.NET语⾔对async 和await的⽀持,实在太棒了。 然⽽,现在⼤多数介绍并发编程的图书和资料都是从最底层概念开始 讲起。那些书⽤⼤量篇幅讲解有关多线程和序列化的基本概念,并且 把较⾼级的技术内容放到最后。我觉得这么做的原因有两个。⾸先, 很多像我这样的并发编程开发⼈员确实是从底层技术学起,费劲地学 习这些⽼技术。其次,很多书是多年前出版的,现在出现了新技术, 改版时就把新技术的内容放到书的末尾。 我觉得那种做法有些落伍。本书只介绍进⾏并发编程的最新⽅法。这 并不是说,理解全部底层概念没⽤。我进⼊⼤学学习编程时,有⼀门 课程需要利⽤少量的门电路来组建⼀个虚拟的CPU,另⼀门课程则需 要⽤汇编语⾔进⾏开发。在我的职业⽣涯⾥,从来没有设计过CPU, 也很少写汇编程序,但是理解那些基础知识对我的⽇常⼯作仍然很有 帮助。但最好是从更⾼级的抽象概念开始学习,我学的第⼀种编程语 ⾔也不是汇编语⾔。 本书填补了⼀项市场空⽩:它是⼀本⽤最新⽅法进⾏并发编程的⼊门 指引和参考书。本书包含了⼏种类型的并发编程,包括并⾏、异步和 响应式编程(reactive programming)。⾄于并发编程的⽼技术,有关 图书和⽹上资料有很多,本书不再介绍。
📄 Page 19
内容速览 本书既是⼀本⼊门指引,也是⼀本快捷参考书。全书分为⼏个部分。 第1章,简要介绍本书涉及的⼏种并发编程类型:并⾏、异步、响 应式编程以及数据流。 第2章⾄第5章,更详细地介绍这⼏种并发编程类型。 其余章节,分别讲解并发编程的各个⽅⾯,也可作为解决常⻅问 题时的参考书。 即使你已经熟悉某些类型的并发编程,建议你还是要读第1章,⾄少略 读⼀下。
📄 Page 20
⽹上资料 本书较全⾯地介绍了⼏种并发编程类型,尽可能包含所有相关知识 点,但不管怎样,⼀本书⽆法包罗万象。要更全⾯地了解并发编程相 关技术,推荐学习下⾯的资料。 并⾏编程⽅⾯,推荐阅读Parallel Programming with Microsoft .NET (Microsoft Press),英⽂原书电⼦版可以从⽹上下载。可惜这本书的 内容有点过时了。例如,“future模式”部分应该改⽤异步编程,“流⽔ 线”(pipeline)部分应该改⽤任务TPL数据流。 异步编程⽅⾯,推荐阅读MSDN,特别是“Task-based Asynchronous Pattern”这篇⽂档。 TPL数据流⽅⾯,推荐阅读微软发布的“Introduction to TPL Dataflow”⽂档。 ⽹络上,响应式扩展(Rx)程序库越来越流⾏了,并且它本⾝还在继 续发展。在我看来,学习Rx最好的资料是Lee Campbell写的 Introduction to Rx。
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now

Recommended for You

Loading recommended books...
Failed to load, please try again later
Back to List