当我编写下面的代码时,为什么我得到的可用线程号是 1022、1020。
因为我正在使用线程池,所以我必须获得最多 25 个线程。
我猜输出线程数是系统上的可用线程。我需要在 win 表单应用程序中获取线程池中的可用线程号。
private void Foo()
{
int intAvailableThreads, intAvailableIoAsynThreds;
// ask the number of avaialbe threads on the pool,
//we really only care about the first parameter.
ThreadPool.GetAvailableThreads(out intAvailableThreads,
out intAvailableIoAsynThreds);
// build a message to log
string strMessage =
String.Format(@"Is Thread Pool: {1},
Thread Id: {2} Free Threads {3}",
Thread.CurrentThread.IsThreadPoolThread.ToString(),
Thread.CurrentThread.GetHashCode(),
intAvailableThreads);
// check if the thread is on the thread pool.
Trace.WriteLine(strMessage);
// create a delay...
Thread.Sleep(30000);
return;
}
多谢..
(注:我从http://www.codeproject.com/KB/cs/AsyncMethodInitation.aspx)
好文章!!
因为我正在使用线程池,所以我必须获得最多 25 个线程。
每个核心线程池中的最大线程数随着时间的推移发生了很大变化。它不再是每个核心 25 个,我怀疑这正是您所期望的。
例如,在我的带有 .NET 4 的四核超线程笔记本电脑上运行此程序,我最多可以获得 32767 个工作线程和 1000 个 IO 完成端口线程:
using System;
using System.Threading;
class Test
{
static void Main()
{
int worker;
int ioCompletion;
ThreadPool.GetMaxThreads(out worker, out ioCompletion);
Console.WriteLine("{0} / {1}", worker, ioCompletion);
}
}
在 .NET 3.5 下,我得到 2000 个工作线程,还有 1000 个 IO 完成端口线程。
但这并不是线程池中实际的线程数,而是线程池允许自己随时间创建的最大线程数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)