【发布时间】:2015-11-05 06:10:11
【问题描述】:
我想制作“TRAP AGENT”库。陷阱代理库跟踪客户端系统的各种参数。如果客户端系统的参数更改超过阈值,则客户端的陷阱代理库会通知服务器有关该参数的信息。例如,如果 CPU 使用率超过阈值,则会通知服务器 CPU 使用率已超过。我必须在客户端测量 50-100 个参数(如内存使用情况、网络使用情况等)。 现在我对设计有了基本的想法,但我被整个库设计困住了。
我想到了以下解决方案:
- 我可以为每个参数创建一个线程(即每个线程将监控单个参数)。
- 我可以为每个参数创建一个进程(即每个进程将监控单个参数)。
- 我可以将各种参数分为不同的组,比如数据使用参数会归入网络组,CPU内存使用参数会归入系统组,然后为每个组创建线程。
现在第一种解决方案与第二种解决方案相比看起来不错。如果我采用第一种解决方案,那么当我想将库升级为 100 到 1000 个参数时它可能会失败。因为那时我要创建1000个线程,这不是一个好的设计(我认为是这样;如果我错了,请纠正我。)
第三种解决方案很好,但响应时间会很长,因为会在单线程中监控许多参数。
有没有更好的方法?
【问题讨论】:
-
一千个线程可能比一千个进程好,但也差不了多少。我认为选项 3 听起来更好。您应该计算出每个参数需要多少 CPU 时间(等)。如果您不小心,您将在监控上如此努力地工作系统,以至于无法完成真正的工作。如果您没有过度使用系统(而且您不应该如此),那么选项 3 听起来会更好,而且更好。实际上,您应该能够考虑在单个进程中使用最少数量的线程。
-
Jonathan Leffler :谢谢..我还可以通过将参数分为两组来最小化线程:紧急参数,非紧急参数。紧急参数需要紧急通知服务器(如系统温度,cpu over时钟等)所以理想情况下我只需要 2 个线程。(考虑到紧急参数很少)
标签: c multithreading optimization shared-libraries static-libraries