gpt4 book ai didi

c - 让线程休眠 (c pthreads)

转载 作者:行者123 更新时间:2023-12-03 12:45:44 25 4
gpt4 key购买 nike

我正在使用 pthreads 并试图让一个线程休眠 X 秒。

我已经尝试过 sleep()nanosleep()pthread_cond_timedwait()(等待假互斥锁 X 秒),pthread_yield(),每次线程唤醒时检查时间,看是否到了它的运行时间,最后只是忙着等待X秒。

问题是,尽管考虑到结果,所有这些方法都可以正常工作,但它们并没有提供我期望的性能结果。性能以吞吐量(每秒回复数)而非时间来衡量。

在我的配置中,我在 2 个模拟 物理内核上运行 3 个软件线程(运行 Ubuntu Server 的 VirtualBox)。当让 3 个线程中的 1 个进入休眠状态时,我希望获得更好的性能,因为其他 2 个线程有一个专用的 physical 内核可以运行。但是,我得到了完全相反的行为(用我所有的方法):增加 sleep 时间会导致性能变差。 (请注意,休眠 线程的工作负载为 130-300 毫秒。)

会不会是虚拟化的原因(主机有4核)?会不会是因为我使用的方法与我使用 pthread_yield 的方法的操作方式相似?

sleep()nanosleep() 是如何实现的?他们使用信号吗?您认为使用信号处理程序和 alarm() 的实现会是更好的方法吗?当我调用 pthread_cond_wait() 时会发生什么?如何实现?

我也曾尝试使用 chrt 来更改调度策略,但没有成功。

最佳答案

我同意@Aaron Digulla 的观点,您永远无法通过反复试验和猜测获得性能问题的答案。 但更重要的是,我不确定您是否在衡量正确的事情,至少根据您的说法,即周期性线程之间的 sleep 时间越长,吞吐量越差。按照这个逻辑,您可以将 sleep 时间设置为无限数量(基本上大于您的测量时间),并且您的吞吐量应该是最差的。是这样吗?

请注意,测量服务器吞吐量可能是一项棘手的工作,在测量和客户端设置方面存在许多缺陷。这里有一些例子,说明你是多么容易被你的综合基准数字所欺骗:http://www.teamquest.com/pdfs/whitepaper/load-test.pdf

如果您对性能测量完全感兴趣,请阅读那篇文章。这是纯金。

关于c - 让线程休眠 (c pthreads),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106757/

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