我正在编写一个读写队列,它需要尽可能低的延迟。写入器的频率不足以使读取器始终处于忙碌状态,因此在常见的实现中,如果队列为空,则读取器将等待锁并进入睡眠状态。当一些东西被放入队列时,读取器被唤醒,然而,这会导致上下文切换并引入延迟。另一种方法是使用自旋锁,但它使用原子操作,本质上锁定在总线上,因此导致总线上的大量负载,影响其他作业的性能。
我的问题是,有没有一种方法可以使读取器处于某种空闲状态,而不会产生CPU,同时又不会对总线造成沉重的负载,并且每当有东西进入时,它就可以退出空闲状态并立即继续。目标是使从放入队列的东西到读取器开始处理它的延迟尽可能地低。我可以为读取器线程分配一个专用的CPU核心,所以在读取器空闲时不会浪费CPU。
有什么想法吗?
发布于 2017-05-09 17:17:04
如果你关心的是延迟,那么就在没有锁的情况下旋转。确保在变量中使用关键字'volatile‘。
它不会有任何总线负载或内存绑定的缺点,因为您实际上是在检查L1/L2/...缓存。并且缓存在内核之间自动同步。
https://stackoverflow.com/questions/24003963
复制相似问题