gpt4 book ai didi

c# - 线程池为什么要这样管理线程呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:31 25 4
gpt4 key购买 nike

<分区>

Joe Albahari 提供了一个 great explanation在他的 Threading in C# 电子书中介绍了 .NET 线程池的自动线程管理及其工作方式的原因。

据我了解,默认情况下,线程池在占用一个处理器的所有核心后,会延迟创建新线程,因为如果所有处理器核心都在忙于计算,创建新线程已无法再提高整体吞吐量(每秒完成的任务数),而新线程只会浪费系统资源。

但是,如果任务在线程池队列中停留的时间过长,线程池会假定池中的线程空闲或以某种方式阻塞,并尝试通过并发运行任务来利用停机时间。

在许多情况下,采用线程池线程具有表示“等待”状态的特殊属性的技术,而不是这种“延迟”算法是否更有意义?它可能看起来像这样:

System.Threading.Thread.CurrentThread.IsWaiting = true;

线程池会立即为排队的任务创建新线程,直到所有处理器内核都被非等待 线程占用。然后,任务将保留在队列中,直到线程完成或发出等待状态信号。

这会有几个好处。首先,如果处理器核心空闲,任务总是在它们排队到池中时立即启动,没有延迟。其次,在运行大量需要超过半秒才能完成的计算密集型任务的应用程序中,线程池不会继续使用不必要的额外线程给系统带来负担。

当然,可能会有一些情况,应用程序需要在严格的期限内完成任务,而不能等待其他任务先完成。该算法可能不适用于这些应用程序。否则,我认为它只会提高多线程应用程序的效率。

你怎么看?

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