线程 将优先级设置为“正常”,并在调用的方法上设置为“低于正常”
本文关键字:设置 方法 低于正常 调用 于正常 优先级 正常 线程 | 更新日期: 2023-09-27 18:30:00
我有一个线程说,
System.Threading.Thread archiveThread = new System.Threading.Thread(_archive);
archiveThread.Priority = System.Threading.ThreadPriority.Normal;
设置为 ThreadPriority.Normal
.当我在单独的类上调用 _archive()
中的某个函数时,它会重置Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
无论我需要"重置"优先级的原因是什么,操作系统对此的响应是什么? ThreadPriority.BelowNormal
会覆盖最初声明ThreadPriority
Normal
吗?还是会保留原始Normal
设置?
蒂亚
-------------模拟----------
namespace ThreadPoolNumThreads
{
class Program
{
static void Main(string[] args)
{
TPoolNumThreads t = new TPoolNumThreads();
t.Start();
Console.ReadKey();
}
}
class TryResetThreadPriority
{
internal void Reset()
{
Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
}
}
class TPoolNumThreads
{
internal void Start()
{
Thread monitor = new Thread(StartMonitor);
monitor.Priority = ThreadPriority.Normal;
monitor.Start();
}
private void StartMonitor(object obj)
{
ArrayList thisArray = new ArrayList();
while (true)
{
Console.WriteLine(" -----------> Threads.Priority {0}", Thread.CurrentThread.Priority);
TryResetThreadPriority myTry = new TryResetThreadPriority();
myTry.Reset();
Console.WriteLine(" -----------> Threads.Priority {0}", Thread.CurrentThread.Priority);
Thread.Sleep(5000);
}
}
}
}
线程优先级是线程的可变状态。如果某些内容更改了优先级,那么这就是线程的新优先级。
所以,是的......如果线程的优先级更改为BelowNormal
,那么只要它具有该优先级,这就是用于调度的优先级。
您应该注意,托管线程可能与操作系统线程完全对应,也可能不完全对应。因此,考虑框架如何处理线程优先级会更有用。框架当然可以将所有这些委托给操作系统,但框架对实现细节有最终决定权。现在有很多不同的.NET实现。:)
最后,你没有问,你可能已经知道了,但你调用的函数降低了线程优先级可能是有充分理由的。这是长时间运行的 CPU 密集型线程的常用技术,允许此类线程在不干扰其他正常优先级任务(如用户界面(的情况下完成其工作。通常,仅当此类线程不再忙于处理 CPU 密集型任务时,才应将优先级设置回Normal
。
(当然,通常这些任务无论如何都会被赋予自己的专用线程,这使得优先级问题变得毫无意义,因为甚至没有在该线程上进行其他处理(。