gpt4 book ai didi

c# - "long-running tasks"是什么意思?

转载 作者:可可西里 更新时间:2023-11-01 03:01:05 28 4
gpt4 key购买 nike

By default, the CLR runs tasks on pooled threads, which is ideal for short-running compute-bound work. For longer-running and blocking operations, you can prevent use of a pooled thread as follows:

Task task = Task.Factory.StartNew (() => ...,
TaskCreationOptions.LongRunning);

我正在阅读有关threadtask 的主题。你能给我解释一下什么是“长时间运行”和“短期运行”任务吗?

最佳答案

通用线程池中,您可以根据启动时间和运行时间之间的比较来区分短期运行和长期运行的线程。

创建线程通常需要一些时间才能开始运行您的代码。

这意味着如果您运行大量线程,每个线程需要一分钟才能启动但只运行一秒钟(时间不准确,但这里的目的只是为了显示关系),每个线程的运行时间将被让他们首先开始所花费的时间所淹没。

这就是使用线程池的原因之一:线程不会在工作完成后终止。相反,它们会保留以供重复使用,这样就不会再次产生启动时间。

因此,从这个意义上讲,长时间运行的线程是指其运行时间远远大于启动所需时间的线程。在这种情况下,启动时间远不如短时间运行的线程重要。

相反,运行时间短的线程是指运行时间小于或等于启动时间的线程。


特别是对于 .NET,它在操作上有一点的不同。一旦达到最小线程数,线程池代码将尝试将线程创建限制为每半秒一个。

因此,如果您知道您的线程将长时间运行,您应该通知调度程序,以便它可以相应地调整自己。这将可能意味着只是创建一个线程而不是从池中获取一个线程,这样池就可以按预期服务短期运行的任务(不保证那种行为,但这样做是有意义的)。

然而,这并没有改变长期运行和短期运行的含义,它只是意味着有一些阈值,在这个阈值上区分是有意义的两者之间。对于 .NET,我建议半秒的数字是一个不错的选择。

关于c# - "long-running tasks"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25833054/

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