C#多线程—线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
线程池主要方法:
// 参数:
// workerThreads:
// 要由线程池根据需要创建的新的最小工作程序线程数。
// completionPortThreads:
// 要由线程池根据需要创建的新的最小空闲异步 I/O 线程数。
// 返回结果:如果更改成功,则为 true;否则为 false。
[SecuritySafeCritical]
public static bool SetMinThreads(int workerThreads, int completionPortThreads);
// 参数:
// workerThreads:
// 线程池中辅助线程的最大数目。
// completionPortThreads:
// 线程池中异步 I/O 线程的最大数目。
// 返回结果:如果更改成功,则为 true;否则为 false。
[SecuritySafeCritical]
public static bool SetMaxThreads(int workerThreads, int completionPortThreads);
简单的例子:
C#多线程—线程池_第1张图片
执行结果:
C#多线程—线程池_第2张图片
这里可以看出,线程池里线程的执行不影响主线程的运行,线程池虽然可以管理多线程的执行,但是却无法知道它什么时候终止。这时候可以利用信号灯AutoResetEvent和ManualResetEvent来解决问题
上面代码稍加改动:
C#多线程—线程池_第3张图片
这里,当线程池中所有线程执行完成后,可以捕获到该事件,我们就可以利用此方法来获取线程池终止事件了,执行结果如下:
C#多线程—线程池_第4张图片

你可能感兴趣的:(C#多线程—线程池)