首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QueueUserWorkItem怪异行为

QueueUserWorkItem怪异行为
EN

Stack Overflow用户
提问于 2019-03-14 15:57:25
回答 1查看 40关注 0票数 0

我正在使用ThreadPool.QueueUserWorkItem()启动一些后台任务。

ThreadPool并发行为很奇怪。我的CPU有4个逻辑核。我希望只有4个正在运行的线程。但是,示例代码显示了不同的行为。

  • 在时间的1/2/3中,为什么会触发mores线程?

下面是示例代码:

代码语言:javascript
复制
class Program
{
    static DateTime s_startTime = new DateTime();
    public static void Main()
    {
        // Queue the task.
        s_startTime = DateTime.Now;
        for (int i = 0; i < 1000; i++)
        {
            ThreadPool.QueueUserWorkItem(ThreadProc, i);
        }
        Console.WriteLine("Main thread does some work, then sleeps.");
        Thread.Sleep(100 * 1000);

        Console.WriteLine("Main thread exits.");
    }

    // This thread procedure performs the task.
    static void ThreadProc(Object i)
    {
        DateTime thread_starttime = DateTime.Now;
        int a = Convert.ToInt32(i);
        double ss = (thread_starttime - s_startTime).TotalSeconds;
        Console.WriteLine("time:" + ss + ", start " + a);
        Thread.Sleep(10 * 1000);
        DateTime e = DateTime.Now;
        double ee = (e - s_startTime).TotalSeconds;
        Console.WriteLine("time:" + ee + ", end " + a);
    }
}

输出

代码语言:javascript
复制
Main thread does some work, then sleeps.
time:0.0040027, start 0
time:0.0360007, start 3
time:0.0360007, start 1
time:0.0360007, start 2
time:1.0178537, start 4
time:2.0191713, start 5
time:3.019311, start 6
time:4.0194503, start 7
time:5.0195775, start 8
time:6.0195875, start 9
time:7.0219127, start 10
time:8.0214611, start 11
time:9.0181507, start 12
time:10.020686, end 0
time:10.020686, start 13
time:10.020686, start 14
time:10.038517, end 1
time:10.038517, start 15
time:10.038517, end 3
time:10.0403473, start 16
time:10.038517, end 2
time:10.0413736, start 17
time:11.0233302, end 4
time:11.0243333, start 18
time:11.0243333, start 19
EN

回答 1

Stack Overflow用户

发布于 2019-03-14 16:10:28

更多的线程将被触发,因为你没有让你的核心忙碌。

Thread.Sleep允许线程生成。由于您的工作人员主要是睡眠而不是CPU绑定,所以调度程序可以自由安排更多线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55166977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档