【问题标题】:Only run thread when I/O load is low仅在 I/O 负载低时运行线程
【发布时间】:2009-05-07 13:35:36
【问题描述】:

我有一个执行 I/O 操作的后台线程(使索引保持最新)。但除此之外,还有几个客户端访问服务器的硬盘,我希望这些访问尽可能快。所以我想,如果索引线程只在 I/O 负载较低时运行,那就太好了。

有没有办法解决这个问题?

我也愿意接受其他建议。

【问题讨论】:

    标签: performance delphi delphi-2009 backgroundworker io


    【解决方案1】:

    使用性能计数器获取磁盘的 I/O 活动。一旦它达到阈值的低端,就让你的线程运行。在决定停止阈值的高端值时,不要忘记考虑您自己的 I/O 负载。

    【讨论】:

    • 我猜你说的是msdn.microsoft.com/en-us/library/aa373083(VS.85).aspx?我必须寻找有关此主题的更多资源...您有任何链接吗?
    • 是的,该链接是一个开始。我知道您在 Delphi,但如果您碰巧也有 VS,请打开“服务器资源管理器”以查看您可以使用的一些不错的 PC。在服务器下,有“性能计数器”——包括给定进程的 IO!所以实际上,您甚至可以只关注您关心的流程(如果您知道他们的信息等)。
    【解决方案2】:

    将您的线程优先级设置为空闲就足够了。


    编辑

    你说得对,线程的优先级不会影响 IO 优先级。
    详细解释请看I/O Prioritization in Windows Vista

    【讨论】:

    • 嗨!我一直以为优先级只会控制cpu次数? I/O 以何种方式以及在何种程度上影响调度决策?
    • 在Vista下,线程优先级较低的进程也有较低的I/O优先级。
    • 那么 XP 呢?任何可能的解决方案?
    • @Dave Van den Eynde:正如我所解释的那样,这可能会导致阻塞一个高优先级线程等待低优先级线程释放其资源。
    猜你喜欢
    • 2018-05-24
    • 2017-12-20
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多