【发布时间】:2009-11-02 11:35:23
【问题描述】:
我正在尝试在“后台”线程中执行一段长时间运行的代码,“后台”是指低优先级线程而不是 .NET 背景术语。我创建了一个线程,将其优先级设置为最低,如果没有其他线程在运行,仍然使用 100% CPU。当我手动调用 Thread.Sleep(1) 但我不想更改我的代码并且通过 Thread.Sleep 控制 CPU 利用率时,情况会有所改善。
我想要某种方式来执行一段代码,该代码将被限制以确保 CPU 使用率在 5%-10%。另外我不想过多地更改代码(它非常复杂)。
有可能吗?
【问题讨论】:
-
如果没有其他线程在使用 CPU,那这有什么关系呢?
-
5% 到 10% 的 CPU 使用率除了给你带来好感之外还有什么?完成任务将花费类似数量的周期,只是延长了更长的时间。另请注意,就能耗而言,少量高负载(在现代 CPU 上)要好得多,因为 CPU 可以更早地进入低功耗状态——这在便携式机器或服务器场中可能很重要。
-
您的正确率可能在 5%-10% 左右——这可能是我的人性。就像我说的,我不介意这个后台同步任务被拉伸 10-20 倍——这不是必需的。但是其他线程的高可用性和快速执行是。代码是在服务器上运行的,只要代码满足业务需求,我其实并不担心能耗问题。
-
我说得不准确 - 有另一个线程正在耐心等待客户端请求,大部分时间什么都不做。但是当请求到来时,它必须立即执行并且它是 CPU 密集型的(分布在多个线程中),尽管相对较短(0.1 - 0.2 秒)。当请求到来并延迟其执行时,我不能让另一个线程以 100% CPU 运行。
标签: c# .net multithreading