我有一个多线程系统,其中有x个线程同时将数据包发送到网络。
这一切都很好,任何花花公子,但是一些线程我想限制它们的速度以便以一定的速率发送数据包。
所以我在我的数据包注入循环中加入了睡眠,它很好地减慢了小速度(1 Mbps 到 70Mbps 左右)的线程,但是如果我想将其限制为 1Gbps,那么我就无法通过睡眠达到那个速度到位。现在我知道它可以达到这个速度,因为如果我从所有线程中移除睡眠,它们可以以每个接近 2Gbps 的速度注入。
所以作为一个测试,我把我的睡眠换成了
usleep(0);
我相信这应该可以让速度再次回到全速,但它仍然有限(仅达到最大速度的 1/20 左右)。所以我目前唯一的解释是,即使是 sleep(0),线程也会产生,因此没有线程获得足够的执行时间。
所以,对于冗长的解释感到抱歉,但是有没有更好的方法让我的线程休眠而不会造成这样的性能损失?
我已经尝试过,usleep 和 nanosleep 并且两者的结果相同。所有测试的设置相同,即线程数
系统:CentOS、pthreads、g++ 4.4.6