我有一个与应用程序性能和智能相关的问题。
我创建了一个窗口服务,如果我在 3 台不同的配置机器上运行它。我希望它利用适当的机器资源(CPU 和内存)。
假设机器 1(M1) 具有单核和 1 GB 内存。
Machine2 (M2) 有两个内核和 2 GB 内存。
Machine3 (M3) 有 4 个内核和 4 GB 内存。
现在,当我的服务在其上运行时,它应该利用适当的资源。就像如果机器的 CPU 使用率为 1%,它应该继续使用用户高达 50% 或更多。如果已经是 50%,则只使用 30%。公羊也是。但永远不要超过 90% 之类的限制。
基本上我写了一个多线程服务,它现在不关心机器资源并继续使用它。我想在其中包含这种智能。
请帮我解决你的想法。
谢谢
最佳答案
正如 Archeg 所说,根据处理器的数量,您可以增加线程数。但是根据 CPU 事件增加线程数是错误的做法。
这样看 - CPU 调度程序以毫秒的粒度分配时隙。如果其他进程对系统的负载较低,则会为您的进程提供更多时间。时期。如果有很多进程,您将获得较少的时间段。你不应该用超过必要的线程来处理它。
你需要做的是决定你想做什么。服务对时间敏感吗?如果是这样,那么在负载很重的系统中,您可以使用更少的 CPU 时间来操作,而在空闲系统中,您可以在相同的时间内使用更多的 CPU 时间,例如,秒。注意:如果您的服务执行 I/O,可能您的服务本身会限制它可以使用多少 CPU。
使用 RAM,您可以执行类似操作,根据系统有多少可用 RAM,将算法切换到使用较少处理或处理速度更快但需要更多内存(反之亦然)的算法。
关键是,除了更好的调度程序(这是很多聪明人多年来一直在关注的东西)之外,没有“服务独立”的方式来进行这种智能扩展。但是,您可以编写了解当前系统约束并相应地更改行为的服务。
关于.net - 提高应用程序性能和智能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085641/