gpt4 book ai didi

.net - 即使所有线程都在休眠,多核处理器也会 Hook

转载 作者:行者123 更新时间:2023-12-02 08:59:30 25 4
gpt4 key购买 nike

我正在 Windows 服务中模拟一些线程,我的每个线程的 Thread.Start 例程直接指向以下内容:

Private WithEvents CheckForOrdersTimer As System.Threading.Timer

Private Sub timerCheckForContracts_Tick(ByVal stateInfo As Object)
' Ticks every 5 seconds, then spawns threads until we're at our max
Do

If ThreadCollection.Count < MaxThreads Then

Dim t As New Threading.Thread(AddressOf SomeThreadingCode()
ThreadCollection.Add(t)
t.Start()

End If
Loop

End Sub


Private Sub SomeThreadingCode()
Do
Thread.Sleep(1000)
If Me.ThreadsShouldContinue = False Then ' Global thread-stopper
Exit Sub
End If
If (New Random).NextDouble > 0.8 Then ' On average, wait 5 seconds
Exit Do
End If

Loop

' Remove this thread from the main collection
ThreadCollection.Remove(Thread.CurrentThread)

End Sub

非常简单 - 线程甚至还没有执行任何操作,但是同时运行两个以上的线程时,我的处理器(Core 2 Duo 2.4 w/4GB)被锁定并且 Windows 变得非常缓慢。根据我读到的内容,Thread.Sleep 在等待时根本不应该消耗任何资源,但它也可能在一个紧凑的时序循环中运行。

有人能给我解释一下这是怎么回事吗?

编辑:根据请求,我扩展了我正在使用的代码量。我最初在生成每个线程之前做了一些数据库工作,但我已经删除了它并且处理器最大化仍然只用这里的代码(当然还有 Windows 服务的 OnStart 方法)发生。

最佳答案

timerCheckForContracts_Tick 正在运行一个无限循环,永远不会进入休眠状态等。即使您每 5 秒“滴答”一次,循环中也没有代码来防止它消耗 CPU 周期,永远检查:

    If ThreadCollection.Count < MaxThreads Then

关于.net - 即使所有线程都在休眠,多核处理器也会 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2368069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com