gpt4 book ai didi

c++ - sleep 限制线程性能

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:30 24 4
gpt4 key购买 nike

我有一个多线程系统,其中有 x 个线程同时向网络发送数据包。

任何花花公子都可以正常工作,但是我想限制一些线程的速度以便以特定速率发送数据包。

所以我让我的数据包注入(inject)循环休眠,它很好地减慢了小速度的线程(1 Mbps 到大约 70Mbps),但是如果我想将它限制在 1Gbps 那么我就无法达到那个速度随着 sleep 的地方。现在我知道它可以达到那个速度,因为如果我从所有线程中删除 sleep ,它们可以每个注入(inject)近 2Gbps。

所以作为测试,我用

代替了我的 sleep
usleep(0);

我相信这应该能让速度再次恢复到全速,但它并没有,它仍然受到限制(仅达到最大速度的大约 1/20)。所以我目前唯一的解释是,即使是 sleep (0),线程也会让步,因此没有线程获得足够的执行时间。

那么,对于冗长的解释感到抱歉,但是有没有更好的方法让我的线程休眠而不会导致这种性能损失?

我已经尝试过,usleep 和 nanosleep,两者的结果相同。所有测试的设置相同,即线程数

系统:CentOS,pthreads,g++ 4.4.6

最佳答案

考虑添加您的 sleep 调用每 n 数据包注入(inject),而不是简单地在每次迭代。这样,您就不会对每个注入(inject)的数据包产生线程切换惩罚,并且您可以以相当细粒度的方式控制完成的 sleep 量。

关于c++ - sleep 限制线程性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14998343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com