《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指令:


dd0d36aee8406166533456d410262f441887104b

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


7437f3d6b792bc0e1b135198938af984f795f2f6


0208c1b0a47f9f4fa0c701259b710e9cfef22f74

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


78d8ca03d9250fae81a7cfc9df88b6d4fad1c009

5.运行程序。

3.4.3 工作原理

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值