【问题标题】:making an isolated process via c program in windows xp?在windows xp中通过c程序创建一个隔离进程?
【发布时间】:2010-06-24 13:36:01
【问题描述】:

我有一个有 4 个线程的应用程序,其中 2 个是基于事件的,2 个不是基于事件的。

问题是我必须隔离 2 个非基于事件的线程,其中 while(1) 循环正在执行,这需要大量 cpu 使用,而且这种使用率甚至达到 100%,

我认为隔离这些线程可以减少cpu使用率,

这是个好主意,如果有其他方法请参考我。

我也想知道如何隔离线程。

提前感谢。

【问题讨论】:

  • 隔离线程是什么意思?设置处理器亲和性?
  • 您正在使用 CPU 的线程是在工作还是只是忙于等待(在循环中旋转,等待工作)?
  • @Samuel 线程最初只是一个旋转循环,但用户可以根据要求在它们之间切换,一个是从 UPD 监听,一个是从网络嗅探,一个是监听串行端口,所有线程都可以配置并且可切换没有人可以是最低优先级

标签: c windows


【解决方案1】:

一般来说,您很少想简单地降低 CPU 使用率。虽然您当然可以这样做(例如,半规律地睡一会儿),但它并不会真正完成很多事情。当然,假设线程正在利用 CPU 时间做一些有用的事情,那么降低 CPU 使用率只会将计算延长更长的时间。

要获得真正的好处,请降低 CPU 密集型线程的优先级。这允许线程尽可能快地完成它们的计算,只要它们是唯一准备运行的线程。同时也意味着只要有高优先级的线程准备好运行,低优先级的线程绝对会消耗no CPU时间1 .

  1. 好吧,如果您想获得技术支持,Windows 有一个反饥饿机制,它可以让准备运行的低优先级线程获得极小的位 CPU 时间,但它太少了通常不会影响到足以引起注意的高优先级线程。

【讨论】:

  • @moon: 是的,差不多就是这样,除非(当然)你真的需要出于其他原因隔离它们(例如,它们崩溃,而你希望能够杀死并重新-独立于应用程序的其余部分启动它们——但正确的解决方法是阻止它们崩溃)。
  • 如果非基于事件的线程应该执行更高优先级的任务怎么办?
  • @puffadder:这非常罕见。您希望尽可能快地进行处理——但保持对用户输入的响应基本上总是优先。例如,在用户尝试取消处理后继续处理实际上绝不是一个好主意。
【解决方案2】:

如果你让你的线程在每次循环后休眠一小段时间,那应该会减少 CPU 负载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多