首页 > 图书中心 >图书详情

.NET并发编程实战

Riccardo Terrell和叶伟民 教你编写代码以提供性能敏感型应用程序所需的速度。

作者:[美] 里卡尔多·特雷尔(Riccardo Terrell)著 叶伟民 译
丛书名:开源.NET生态软件开发
定价:128
印次:1-2
ISBN:9787302549598
出版日期:2020.05.01
印刷日期:2024.04.29

图书内容 ● 最重要的并发抽象 ● 采用代理编程模型 ● 实现实时事件流处理 ● 执行无边界异步操作 ● 适用于所有平台的最佳并发实践和模式

more >

前 言 你可能正在阅读这本《.NET并发编程实战》,因为你希望构建速度极快的应用程序,或者想学习如何显著提高现有应用程序的性能。你关心性能,因为你致力于生成更快的程序,而且当代码中的一些更改使应用程序更快,响应更快时,你会感到兴奋。并行编程为对新开发技术充满热情的开发人员提供了无限的可能性。当需要考虑性能时,无论怎么强调在编程中使用并行的好处也不为过。但是,使用命令式和面向对象的编程风格来编写并发代码会很复杂,并引入了复杂性。因此,并发编程并没有被广泛地作为一种常见的实践所接受,这迫使程序员去寻找其他解决方案。 上大学的时候,我学习了函数式编程课程。那时,我学习的是Haskell,尽管该语言学习曲线很陡峭,难度很高,但是我很享受该课程的每一节课。因为我记得当我看到第一个例子时,对其解决方案的优雅以及简单而感到惊讶。15年后,当我开始寻找利用并发来增强我的程序的解决方案时,我又想起这些课程。这一次,我能够充分地认识到函数式编程在设计我的日常程序时的强大和有用。使用函数式编程风格存在一些益处,我将在《.NET并发编程实战》中对这些益处逐一进行讨论。 当时,我需要为医保行业构建一个软件系统,我的学术研究与专业工作在这里重合了。该项目需要开发一个应用程序去分析放射性医学图像。图像处理需要图像降噪、高斯算法、图像插值和图像滤波等几个步骤才能将颜色应用于灰度图像。该应用程序是使用Java开发的,最初能够按预期运行。但是后来该部门增加了需求,这种情况经常发生,这时问题就开始出现了。虽然软件没有任何问题或错误,但随着要分析的图像数量的增加,它变得更慢了。 当然,对这个问题提出的第一个解决方案是购买一个更强大的服务器。虽然在当时这是一个有效的解决方案,但是今天如果你购买一个新机器的目的是为了获得更快的CPU计算速度,你会感到失望的。这是因为现代CPU虽然有多个内核,但是其中单个内核的速度并不比2007年购买时的单个内核快。比购买新的服务器更好和更持久的替代方法是引入并行来利用多核硬件及其所有资源,从而最终加快图像处理。 从理论上讲,这是一项简单的任务,但是实际上并非如此。我必须学习如何使用线程和锁。遗憾的是,我在死锁方面获得了第一手经验。 这个死锁迫使我对应用程序的代码进行了大规模的修改。修改多到引入了bug,甚至与我做修改的原始目的无关。我很沮丧,这些代码是不可维护和脆弱的,整个过程很容易出现错误。我不得不在原来的问题上退一步,从不同的角度寻找解决方案。必须要有更好的办法。 我们使用的工具对我们的思维习惯产生深远的影响,因此也会影响我们的思维能力。 —Edsger Dijkstra 在花了几天时间寻找解决多线程错乱失控问题的解决方案后,我找到了答案。我所研究和阅读的一切都指向函数式范式。多年前我在大学课堂上学到的准则现在成为我前进的机理。我使用函数式语言重写图像处理应用程序的核心以应用并行运行。从命令式过渡到函数式最初是一个挑战。我几乎忘记了我在大学中学到的一切,所以我并不自豪地说,在这次经历中,我所编写的代码在函数式语言中看起来是非常面向对象的,但总体来说这是个成功的决定。新程序的编译和运行具有显著的性能改进,硬件资源得到了完全利用并且毫无错误。另外,一个意想不到的惊喜是,函数式编程导致代码行的数量显著减少: 比使用面向对象语言的原始实现减少了近50%。 这次经历让我重新考虑OOP是否适合作为解决所有编程问题的答案。我意识到这种编程模型和解决问题的方法视野有限。我这次进入函数式编程的旅程就是始于对良好的并发编程模型的要求。 从此之后,我对应用于多线程和并发的函数式编程产生了浓厚的兴趣。在看到复杂问题和问题根源时,我就会想到这些问题在函数式编程中的解决方案,函数式编程是一个功能强大的工具,可以使用可用的硬件来更快地运行。我开始欣赏这门学科是如何以一种连贯的、可组合的、漂亮的方式来编写并发程序的。 我第一次产生写这本书的想法是在 2010年7月,那时微软推出F# 并将其作为Visual Studio 2010的一部分。那时我对业界的趋势就已经很清楚了,越来越多的主流编程语言支持函数式,包括 C#、C++、Java和Python。2007年,C# 3.0引入了头等函数和新的构造(如lambda表达式和类型推断),从而引入函数式编程概念,并且很快就出现了允许声明式编程风格的语言集成查询(Language Integrate Query,LINQ)。 .NET平台已经融入了函数式世界。随着F#的引入,Microsoft拥有了同时支持面向对象和函数式范式的功能齐全的语言。此外,像C#这样的面向对象语言变得越来越混合了,弥合了不同编程模式之间的差距,从而允许这两种编程风格共存。 此外,我们正面临着多核时代,在这个时代里,CPU能力是以可用内核的数量来衡量的, 而不是以每秒的时钟周期来衡量的。有了这一趋势之后,单线程应用程序将无法在多核系统上实现更高的速度,除非该应用程序集成了并行性并使用算法将工作分散到多个内核上。 现在已经很清楚了,多线程是必需的,这个观点点燃了我把这种编程方法带给你的热情。《.NET并发编程实战》结合了并发编程和函数式范式的强大功能,并使用C#和F#语言来编写可读的、更模块化的和可维护的代码。你的代码将受益于这些技术,以更少的代码在最佳性能下运行,从而提高工作效率和程序的弹性。 开始开发多线程代码是一个激动人心的时刻。在这个过程中,软件公司比以往任何时候都更需要合适的工具和技术以便在不需要做出妥协的情况下选择对应的正确编程风格。在学习并行编程的过程中,最开始的挑战将会很快地减少,而对你毅力的回报则是无限的。 无论你的专业领域是什么,无论你是后端开发人员还是前端Web开发人员,无论你是开发基于云的应用程序或视频游戏,使用并行来获得更好的性能并构建可扩展的应用程序,这点都将一直存在。 《.NET并发编程实战》将描述我运用函数式编程使用C#和F#编写.NET并发程序的经验。我相信函数式编程正在成为编写并发代码,协调.NET中的异步和并行程序的实际方式,《.NET并发编程实战》将为你提供你所需的一切知识,从而让你做好准备并投身这个令人兴奋的多核计算机编程领域。

more >
扫描二维码
下载APP了解更多

同系列产品more >

C# 11和.NET 7入门与跨平台开发(第...

[美] 马克·J. 普莱斯(Ma
定 价:158元

查看详情
Azure、DevOps和微服务软件架构实...

[葡] 加布里埃尔·巴普蒂
定 价:128元

查看详情
C#高级编程(第12版)

[奥]克里斯琴·内格尔(C
定 价:198元

查看详情
C# 10 和 .NET 6入门与跨平台开发...

[美] 马克·J.普莱斯(Mar
定 价:168元

查看详情
C#入门经典(第9版)

[德] 本杰明·帕金斯(Ben
定 价:118元

查看详情
图书分类全部图书
more >
  • Riccardo Terrell是一位经验丰富的软件工程师和微软 MVP,他热衷于函数式编程。Riccardo在竞争激烈的商业环境中提供具有高商业价值的技术解决方案方面拥有超过20年的经验。
    1998年,Riccardo在意大利创办了自己的软件公司,专门为客户提供定制的医疗软件。2007年,Riccardo移居美国,此后一直担任. NET高级软件开发人员和高级软件架构师,在业务环境中提供经济高效的技术解决方案。Riccardo致力于集成先进技术工具,以让组织内部沟通更高效,提高工作效率并降低运营成本。
    他积极参与函数式编程社区,包括.NET会议和国际会议并广为人知。Riccardo相信多种范式混合编程是能够最大限度地发挥代码力量的一种机制。


    叶伟民
    广州.NET技术俱乐部主席、中国香港Azure/.NET技术俱乐部创始人兼主席、.NET社区联盟建设者,在.NET编程领域有15年工作经验。

  • 要充分释放你的多处理器计算机的卓越性能,这样并发应用程序会运行得更快,因为它们跨处理器内核分散工作,同时执行多个任务。.NET平台上的现代化工具和技术(包括并行 LINQ、函数式编程、异步编程和任务并行库)十分强大,替代了传统的基于线程的并发解决方案。
    《.NET并发编程实战》一书将教你编写代码以提供性能敏感型应用程序所需的速度。本书以 C# 和 F# 中的示例指导你完成在理论和实践上强调函数式编程的并发和并行设计。你将从并发的基础开始,掌握基本技术和设计实践,以优化在现代多处理器系统上运行的代码。
more >
  • 目    录

     

     第Ⅰ部分  函数式编程在并发程序中所体现的优势 

    第1章  函数式并发基础   3

    1.1  你将从本书中学到什么   4

    1.2  让我们从术语开始   5

    1.2.1  顺序编程——一次执行一个任务   6

    1.2.2  并发编程——同时运行多个任务   7

    1.2.3  并行编程——同时执行多个任务   8

    1.2.4  多任务处理——同时在一段时间内执行多个任务   9

    1.2.5  多线程性能调优   10

    1.3  为什么需要并发   11

    1.4  并发编程的陷阱   14

    1.4.1  并发的危害   14

    1.4.2  共享状态的演变   17

    1.4.3  一个简单的真实示例:并行快速排序   17

    1.4.4  F#中的基准测试   21

    1.5  为什么选择函数式编程实现并发   21

    1.6  拥抱函数式范式   24

    1.7  为什么选择F#和C#进行函数式并发编程   25

    1.8  本章小结   27

    第2章  并发函数式编程技术   29

    2.1  使用函数组合解决复杂的问题   30

    2.1.1  C#的函数组合   30

    2.1.2  F#的函数组合   32

    2.2  闭包简化函数式思考   33

    2.2.1  使用lambda表达式捕获闭包中的变量   34

    2.2.2  多线程环境中的闭包   36

    2.3  用于程序加速的记忆化缓存技术   38

    2.4  记忆快速网络爬虫的操作   42

    2.5  延迟记忆化以获得更好的性能   46

    2.6...

精彩书评more >

标题

评论

版权所有(C)2023 清华大学出版社有限公司 京ICP备10035462号 京公网安备11010802042911号

联系我们 | 网站地图 | 法律声明 | 友情链接 | 盗版举报 | 人才招聘