Jak*_*ake 3 linux vmware virtual-machine solaris-10
我有一个用C编写的守护程序应用程序,目前在Solaris 10计算机上运行时没有已知问题.我正在将其移植到Linux上.我不得不做出微小的改变.在测试期间,它通过所有测试用例.它的功能没有问题.但是,当我在Solaris计算机上"空闲"时查看其CPU使用情况时,它使用了大约.03%的CPU.在运行Red Hat Enterprise Linux 4.8的虚拟机上,相同的进程使用所有可用的CPU(通常在90%+范围内的某个位置).
我的第一个想法是事件循环必定出错.事件循环是一个无限循环(while(1)),调用select().时间码设置为timeval.tv_sec = 0和timeval.tv_usec = 1000.这对于流程正在做什么似乎足够合理.作为测试,我碰到了timeval.tv_sec1.即使这样做,我也看到了同样的问题.
关于select如何在Linux与Unix上运行,我有什么遗漏吗?或者它与在虚拟机上运行的OS有何不同?或者也许还有其他我完全错过的东西?
还有一件事我不确定使用哪个版本的vmware服务器.它刚刚在一个月前更新了.
我相信Linux会将剩余时间写入select()调用的time参数,而Solaris则不会.这意味着不了解POSIX规范的程序员可能不会重置select之间的时间参数.
这将导致第一次调用具有1000次usec超时,并且所有其他调用使用0 usec timeout.