Packt出版社大约一年前首次与我联系,约稿撰写本书。经过一段漫长的写作过程,本书的编写终于完成,虽然比我预期的要难,但是在此过程中我也学习到了很多知识。你现在看到的图书是我经过许多漫长日子、辛勤工作的结晶,我很自豪最终能将它呈现在你的面前。
编写一本有关C#的图书对我来说意义重大,因为在我的职业生涯中,C#是我使用最为娴熟的语言,撰写一本和它有关的图书是我一直以来的梦想。自从C#面世以来,它确实有了长足的发展,而.NET Core的出现也增强了C#在开发人员社区中的声誉。
为了使本书对广大读者更有意义,我们将同时讨论经典的线程模型和任务并行库(TPL),并通过代码进行更详细的解释。我们将首先研究操作系统和多线程代码编写方面的基本概念,然后仔细探讨经典线程和TPL之间的区别。
本书的编写方式力求易于学习,并注意在当前最佳编程实践的背景下进行并行编程。本书示例简短明了,即使你没有太多的先验知识也很容易理解。
希望你能喜欢阅读本书,就像我喜欢撰写本书一样。
本书读者
本书适用于希望学习多线程和并行编程概念,并想在使用.NET Core构建的企业应用程序中使用它们的C#程序员。如果你是学生或专业人士,想理解并行编程与现代硬件的结合方式,那么本书也很适合你。
本书假定你已经熟悉C#编程语言和操作系统相关基础知识。
内容介绍
本书共包括5篇14章,具体内容如下。
? 第1篇:线程、多任务和异步基础,包括第1~4章。
? 第1章“并行编程简介”,阐释多线程和并行编程的重要概念。本章还介绍操作系统的发展以及现代并行编程结构。
? 第2章“任务并行性”,演示如何将程序划分为任务,包括将APM模式和EAP模式转换为任务,以有效利用CPU资源和提高程序性能。
? 第3章“实现数据并行”,重点介绍使用并行循环实现数据并行性。本章还介绍有助于实现并行性的扩展方法以及分区策略。
? 第4章“使用PLINQ”,说明如何利用PLINQ支持,这包括排序查询和取消查询。另外,本章还讨论影响PLINQ性能的因素。
? 第2篇:支持.NET Core中并行性的数据结构,包括第5~7章。
? 第5章“同步原语”,介绍C#中可用的同步结构,包括互锁操作、锁原语、信号原语、屏障和倒数事件、自旋锁等,使用它们可以处理多线程代码中的共享资源。
? 第6章“使用并发集合”,描述如何利用.NET Core中可用的并发集合,而不必担心手动同步编码的问题。
? 第7章“通过延迟初始化提高性能”,阐释延迟初始化的概念,并探讨如何使用延迟模式实现内置构造,以及如何减少延迟初始化的开销。
? 第3篇:使用C#进行异步编程,包括第8章和第9章。
? 第8章“异步编程详解”,探讨如何在早期版本的.NET中编写异步代码,并讨论适合使用异步编程的情形和不宜使用异步编程的情形。
? 第9章“基于任务的异步编程基础”,介绍如何利用.NET Core中的新结构(async和await关键字)来实现异步代码。
? 第4篇:异步代码的调试、诊断和单元测试,包括第10章和第11章。
? 第10章“使用Visual Studio调试任务”,重点介绍Visual Studio 2019中可用的各种工具,这些工具使调试并行任务更加容易。
? 第11章“编写并行和异步代码的单元测试用例”,介绍在Visual Studio和.NET Core中编写单元测试用例的各种方法。
? 第5篇:.NET Core附加的并行编程功能,包括第12~14章。
? 第12章“ASP.NET Core中的IIS和Kestrel”,介绍IIS和Kestrel线程模型。本章还探讨微服务中线程的最佳实践以及对异步流的支持。
? 第 13 章“并行编程中的模式”,介绍用 C#语言实现的各种模式。包括MapReduce映射和归约、聚合、分叉/合并模式、推测处理模式、延迟模式和共享状态模式等。这也包括自定义模式实现。
? 第14章“分布式存储管理”,探讨如何在分布式程序中共享存储。本章还介绍通信网络的类型和特征、拓扑结构、消息传递接口等。
充分利用本书
要完成本书的学习,需要在系统上安装Visual Studio 2019和.NET Core 3。建议先掌握一些有关C#语言和操作系统方面的基础知识。
下载示例代码文件
读者可以从www.packtpub.com下载本书的示例代码文件。具体步骤如下。
(1)登录或注册www.packtpub.com。
(2)在Search(搜索)框中输入本书英文版名称的一部分Hands-On-Parallel-Programming,即可在推荐下拉菜单中看到本书,如图P-1所示。
图P-1
(3)选择Hands-On Parallel Programming with C# 8 and .NET Core 3一书,在其详细信息页面中单击Download code files(下载代码文件)超链接,如图P-2所示。
图P-2
提示:如果未出现Download code files(下载代码文件)超链接,请先注册并登录该网站。
下载文件后,请确保使用下列最新版本解压缩或解压缩文件夹。
? WinRAR/7-Zip(Windows系统)。
? Zipeg/iZip/UnRarX(Mac系统)。
? 7-Zip/PeaZip(Linux系统)。
另外,本书的代码包也已经托管在GitHub上,对应网址如下。
https://github.com/PacktPublishing/Hands-On-Parallel-Programming-with-C-8-and-.NET- Core-3
在上述页面上,单击Code(代码)按钮,然后选择Download ZIP即可下载本书代码包,如图P-3所示。
图P-3
此外,如果代码有更新,则会在现有GitHub存储库上进行更新。
下载彩色图像
我们还提供了一个PDF文件,其中包含本书所使用的屏幕截图/图表的彩色图像。可以通过以下地址下载。
https://static.packt-cdn.com/downloads/9781789132410_ColorImages.pdf
本书约定
本书使用了许多文本约定。
(1)CodeInText:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL和用户输入等。以下段落就是一个示例。
从.NET Framework 4开始,许多线程安全集合被添加到.NET库中。还添加了一个新的命名空间System.Threading.Concurrent。这包括以下结构。
? IProducerConsumerCollection。
? BlockingCollection。
? ConcurrentDictionary。
(2)有关代码块的设置如下:
private static void PrintNumber10Times()
{
for (int i = 0; i < 10; i++)
{
Console.Write(1);
}
Console.WriteLine();
}
(3)任何命令行输入或输出都采用如下所示的粗体代码形式:
private static void PrintNumber10Times()
{
for (int i = 0; i < 10; i++)
{
Console.Write(1);
}
Console.WriteLine();
}
(4)术语或重要单词采用中英文对照形式,在括号内保留其英文原文。示例如下:
就集合而言,线程安全(Thread Safe)并不是一个全新的概念。所谓线程安全,就是指在拥有共享数据的多条线程并行执行的程序中,代码会通过同步机制保证各个线程都可以被正确执行,而不会出现数据被污染等意外情况。
(5)对于界面词汇则保留其英文原文,在后面使用括号添加其中文翻译。示例如下:
Test Explorer(测试资源管理器)的一项关键功能是能够并行运行测试用例。如果你的系统具有多个CPU核心,则可以轻松利用并行性来更快地运行测试用例。这可以通过单击Test Explorer(测试资源管理器)中的Run Tests in parallel(并行运行测试)按钮来完成。
(6)本书还使用了以下两个图标。
表示警告或重要的注意事项。
表示提示或小技巧。
关于作者
Shakti Tanwar是Techpro Compsoft Pvt Ltd(一家全球信息技术咨询提供商)的首席执行官。他是一名技术推广人员和软件架构师,在软件开发和企业培训方面拥有超过15年的经验。Shakti是一名Microsoft认证培训师,并且一直与Microsoft合作在中东地区开展培训。他的专业领域包括.NET、Azure机器学习、人工智能、纯函数式编程的应用和并行计算等。
没有我的妻子Kirti和儿子Shashwat的支持,这本书是不可能面世的,正是他们的微笑和鼓励使我奋力前进。
永远感谢我的父母和兄弟姐妹,他们一直激励着我迈向新的成功高度。
非常感谢我的朋友、导师和Packt团队,他们在本书的创作中为我提供了悉心的指导。
关于审稿人
Alvin Ashcraft是一名居住在费城附近的开发人员。他从事C#、Visual Studio、WPF、ASP.NET等软件的开发工作长达23年。他已经9次获得Microsoft MVP头衔。他的博客是Morning Dew,内容大都与.NET开发有关。另外,他也是Allscripts的首席软件工程师,负责构建医疗保健软件。他之前曾在软件公司(包括Oracle)任职。他还审读过Packt Publishing的其他书稿,如Mastering ASP.NET Core 2.0、Mastering Entity Framework Core 2.0和Learning ASP.NET Core 2.0等。
Vidya Vrat Agarwal是一位饱学之士、演讲人、Apress的出版作者,并且也是Apress、Packt和O’Reilly等出版社10多本书的技术审稿人。除此之外,他还是一位架构师,在为大型企业设计架构和开发分布式软件解决方案方面拥有20年的经验。在T-Mobile担任首席架构师时,他曾与B2C和B2B团队合作,为各种T-Mobile计划建立解决方案和架构路线图,从而对数百万的T-Mobile客户产生积极影响。他将软件开发视为一种技巧,并且积极支持软件架构和简洁代码实践。