天天看点

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

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

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

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

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

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.运行程序。

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

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