【问题标题】:How to set Priority level of main thread如何设置主线程的优先级
【发布时间】:2011-08-17 13:37:22
【问题描述】:

我有一个运行 44*3=132 个线程 + 主线程的应用程序,每 3 个线程代表一个 tcp 客户端网络。释放所有这些需要花费大量时间来完成应用程序,因此我正在寻找一种方法来加快速度。

我只知道一种方法 - 设置优先级。所以每个线程都有优先级=正常。我应该如何将主线程的优先级设置为尽可能高的级别,以便更快地释放所有其他线程?

【问题讨论】:

  • 更改线程优先级几乎从来都不是优化问题的正确解决方案。
  • 提升主线程优先级可能会对其他线程产生负面影响,导致性能变差。这不是正确的方法。让您的线程定期检查全局标志并将线程的 FreeOnTerminate 设置为 true。当您的主线程设置标志时,所有线程将自行终止。他们甚至可以发布消息以确认终止。
  • @netboy,正确的方法是 (1) 分析您的应用程序,以更好地了解什么是花费时间和 (2) 重新考虑问题域。我不只是写答案的原因是我没有您的代码或您对业务问题的理解。我有两段来自您,其中一段主要描述了一个“解决方案”,我认为这是一个坏主意。我不能只看你第一段中的两句话就神奇地为你找到一个解决方案。但是,我可以建议您重新考虑这个问题。 至少,你应该在这里展示你的代码。
  • 我有一个应用程序当前在一个 9 岁的单核 Pentium P4 上运行,有 50 到 100 个线程。关闭通常需要不到一秒钟的时间,所以我怀疑这是你做事的方式,而不是线程优先级问题。
  • -1 代表XY problem

标签: multithreading delphi


【解决方案1】:

我想说您需要查看您的线程在做什么,并要求它们并行执行。在我的服务应用程序中,它可以有数百个线程(一些带有子线程),我有一个有效的关闭循环:

for I := 0 to ThreadCount - 1 do
    Threads[I].Terminate;
for I := 0 to ThreadCount - 1 do
    Threads[I].WaitFor;
for I := 0 to ThreadCount - 1 do
    Threads[I].Free;

线程在终止时会及时关闭,但是通过要求它们先关闭,然后等待它们,这一切都可以更快地发生。当然,如果第一个线程是最后一个关闭的,那么中间的循环将会非常快,因为它总是只需要最慢的线程关闭。

如果这对您的问题没有帮助,那么我认为我们需要查看您的代码。

【讨论】:

  • for I := 0 to ThreadCount ?你确定吗?或者更好:for I := 0 to ThreadCount-1?
【解决方案2】:

改变主线程优先级的方法是在其上调用SetThreadPriority。对于句柄,只需使用GetCurrentThread — 您不需要打开真正的句柄。

这可能对你试图解决的问题没有任何影响,但你没有问如何解决你的问题;你问如何调整线程优先级。如果您想知道如何让您的线程更快地被释放,那么下一次,请改为询问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多