设置Thread.Priority =最低的真正含义是什么?

时间:2010-02-05 00:14:57

标签: c# .net multithreading

为了加快我的资源需求应用程序的启动速度,我已将各种启动任务移至后台线程,并使用'Thread.Priority = Lowest`标记这些线程。

然而,这些低优先级线程仍然与应用程序并行执行(因为它加载其UI),如ANTS Profiler上的时间线所示。我的理解是,最低意味着CPU将首先处理所有更高优先级的线程,然后获得优先级较低的线程。

我的理解是否有缺陷?

3 个答案:

答案 0 :(得分:4)

可以使用最低优先级调度线程,但它们不会在线路后面等待。他们可能仍然会获得足够的CPU时间片来吞噬某些真正的瓶颈资源,比如硬盘访问。这真的完全取决于你在做什么。

初始化计算密集型吗?或者网络密集型/硬盘密集型。当不同的任务使用不同的资源时,多线程方法将最有效,或者允许在不阻止其他操作的情况下运行计算密集型操作。

单线程方法可以可行地命令任务使应用程序看起来加载速度更快,因为多线程方法可能意味着每个人都可以同时获取,甚至可能互相帮助。

答案 1 :(得分:3)

降低优先级并不意味着线程将始终是最后一个获取时间段的线程。如果优先级较低的线程暂时没有时隙,则更有可能获得一个时隙。这样,较低优先级的线程将运行得更慢,但不会完全停止。

此外,如果主线程正在等待某些事情,例如等待磁盘驱动器返回数据,则其他线程可以在该空隙中运行。如果主线程执行大量磁盘I / O,则会有很多漏洞来运行其他线程。

如果CPU具有多个核心,则负载将在线程之间更均匀地分配。无论线程有多高优先级,它仍然只能在一个核心上运行。

答案 2 :(得分:1)

是否可以重新设计您的应用程序,以便在加载UI之前,您尝试等待加载UI的线程实际上根本不会运行?这可以做你想要的,迫使他们等到UI被加载(因为它们甚至没有被创建/启动),而你正在使用的方法导致它们执行频率较低,但仍然执行。