threadpool的数量_多线程之旅(11)_如何限制系统线程池ThreadPool的最大最小并发数量_SetMaxThreads/SetMinThreads用法...

本文通过示例详细介绍了如何使用ThreadPool的SetMinThreads和SetMaxThreads方法来限制线程池的最小和最大并发线程数。实验结果显示,这两个方法能够有效控制线程池的并发量,并且在不同环境(如.NET Core和.NET Framework)下,线程池的实现可能存在差异。此外,还探讨了是否存在独立的IO线程池用于处理阻塞时的IO操作。
摘要由CSDN通过智能技术生成

ThreadPool有两个设置线程池并发数量的方法,分别是:

ThreadPool.SetMinThreads(int workerThreads, int completionPortThreads)//设置最小线程并发数

ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)//设置最大线程并发数

参数解释:

workerThreads  要由线程池根据需要创建的新的最小工作程序线程数。

completionPortThreads  要由线程池根据需要创建的新的最小空闲异步 I/O 线程数。

使用这两个方法可以控制线程池ThreadPool运行过程中的并发数量,他的效果怎么样呢,我们写段代码来测试一下:

public static void ThreadUseAndConstruction()

{

ThreadPool.SetMinThreads(5, 5); // 设置线程池最小线程数量为5

ThreadPool.SetMaxThreads(15, 15); // 设置线程池最大线程数量为15

Stopwatch watch = new Stopwatch();

watch.Start();

WaitCallback callback = index =>

{

Console.WriteLine(String.Format("{0}: Task {1} started", watch.Elapsed, index));

Thread.Sleep(10000);

Console.WriteLine(String.Format("{0}: Task {1} finished", watch.Elapsed, index));

};

for (int i = 0; i < 20; i++)

{

ThreadPool.QueueUserWorkItem(callback, i);

}

}

这段代码部分执行结果如下

00:00:00.0707416: Task 2 started

00:00:00.0706114: Task 0 started

00:00:00.0708271: Task 1 started

00:00:00.0708882: Task 3 started

00:00:00.0709376: Task 4 started

00:00:01.0110528: Task 5 started

00:00:01.5121437: Task 6 started

00:00:02.0163181: Task 7 started

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值