c++ - sleep 限制了线程性能

标签 c++ pthreads sleep

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

这一切对任何花花公子来说都工作得很好,但是我想限制某些线程的速度以便以一定的速率发送数据包。

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

因此,作为测试,我用 sleep 代替了

usleep(0);

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

所以,抱歉这么长的解释,但是有没有更好的方法让我的线程休眠而不造成这样的性能损失?

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

系统:CentOS、pthreads、g++ 4.4.6

最佳答案

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

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

相关文章:

c++ - 如何在C++中进行类似window的安装

c++ - 来自 hflip 的段错误

c - 如何使用互斥量来同步此序列: (A or B)C (A or B) (A or B)C

javascript - iOS 8 错误 - 当设备从 sleep 中返回时,OnUpdateReady 不再调用

c - 父进程不会使用 signal() 等待所有子进程退出

c++ - 解决 "_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)"崩溃。 C++

c++ - SDL_ttf 找不到 "SDL.h",但 main.cpp 可以

c - 分配结构堆与堆栈 : Pthread_create

c++ - 当取消请求排队时,pthread_cancel() 将如何响应?

python - python 中的多线程 : when does a thread become inactive?