加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 线程池中的活动线程号

发布时间:2020-12-15 18:16:03 所属栏目:百科 来源:网络整理
导读:当我编写下面的代码时,为什么我得到可用的线程数,如1022,1020. 当我使用线程池时,我必须获得25个最大线程. 我猜输出线程号是系统上的可用线程.我需要在win表单应用程序中的线程池中获取可用的线程号. private void Foo(){ int intAvailableThreads,intAvaila
当我编写下面的代码时,为什么我得到可用的线程数,如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/AsyncMethodInvocation.aspx获得了代码)
好文章!!

解决方法

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

每个核心的线程池中的最大线程数随着时间的推移而发生了很大变化.它不再是每个核心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完成端口线程.

这不是线程池中实际存在的线程数 – 它是线程池允许自己随时间创建的最大数量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读