Active Thread Number in Thread Pool

断了今生、忘了曾经 提交于 2019-11-29 09:35:20

问题


When I write the below code, why do I get avaliable Thread number like 1022, 1020. I have to get 25 thread max as I am using thread pool.

I guess the ouput thread number is the avaliable threads on the system. I need to get the avaliable thread number in my thread pool, in win form application.

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;
}

Thanks alot..

(Note : I got the code from http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx) Nice article!!


回答1:


I have to get 25 thread max as I am using thread pool.

The maximum number of threads in the thread-pool per core has changed a lot over time. It's no longer 25 per core, which I suspect is what you were expecting.

For example, running this on my quad-core hyperthreaded laptop with .NET 4, I get a maximum of 32767 worker threads and 1000 IO completion port threads:

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);
    }    
}

Under .NET 3.5 I get 2000 worker threads and still 1000 IO completion port threads.

That isn't the number of threads actually in the thread pool though - it's the maximum number that the thread pool allows itself to create over time.




回答2:


Use ThreadPool.GetMaxThreads to get what you want.

This article helps explain everything you need to know about ThreadPool.




回答3:


I set both to 10001, using ThreadPool.SetMaxThread. After that whenever, I run your program it shows max thread 10001, its persisted. I didn't restarted my core i 5 system.

After that I set both it to 10000000 , and it is showing following thread max count

worker:32767 ioCompletion:32767

So on my Windows 7 Intel Core i5 , this is the maximum capacity.




回答4:


int available;
int maxLimit;
System.Threading.ThreadPool.GetAvailableThreads(out available, out maxLimit);


来源:https://stackoverflow.com/questions/5236493/active-thread-number-in-thread-pool

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!