《C#多线程编程实战(原书第2版)》——3.4 线程池与并行度

本节书摘来自华章出版社《C#多线程编程实战(原书第2版)》一书中的第3章,第3.4节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 线程池与并行度

本节将展示线程池如何工作于大量的异步操作,以及它与创建大量单独的线程的方式有何不同。

3.4.1 准备工作

为了学习本节,你需要安装Visual Studio 2015。除此之外无需其他准备。本节的源代码放置在BookSamplesChapter3Recipe3目录中。

3.4.2 实现方式

请执行以下步骤来了解线程池如何工作于大量的异步操作,以及它与创建大量单独的线程的方式的不同之处:

1.启动Visual Studio 2015。新建一个C#控制台应用程序项目。

2.在Program.cs文件中加入以下using指令:


《C#多线程编程实战(原书第2版)》——3.4 线程池与并行度

3.在Main方法下面加入以下代码片段:


《C#多线程编程实战(原书第2版)》——3.4 线程池与并行度


《C#多线程编程实战(原书第2版)》——3.4 线程池与并行度

4.在Main方法中加入以下代码片段:


《C#多线程编程实战(原书第2版)》——3.4 线程池与并行度

5.运行程序。

3.4.3 工作原理

当主程序启动时,创建了很多不同的线程,每个线程都运行一个操作。该操作打印出线程ID并阻塞线程100毫秒。结果我们创建了500个线程,全部并行运行这些操作。虽然在我的机器上的总耗时是300毫秒,但是所有线程消耗了大量的操作系统资源。

然后我们使用同样的工作流,只不过不为每个操作创建一个线程,而将它们放入到线程池中。然后线程池开始执行这些操作。线程池在快结束时创建更多的线程,但是仍然花费了更多的时间,在我的机器上是12秒。我们为操作系统节省了内存和线程数,但是为此付出了更长的执行时间。

上一篇:智能家居的春天来临 集成商还会在吗?


下一篇:《C#多线程编程实战(原书第2版)》——3.3 向线程池中放入异步操作