读书人

请求好手提供一个高效的消息队列

发布时间: 2013-02-17 10:44:46 作者: rapoo

请求高手提供一个高效的消息队列
需求如下:
对于一个队列Q,多个生产者线程往里写消息,一个消费者线程从里边取消息并处理;
一个生产者往里边写一个消息的时间花费应该在纳秒级;
消费者线程如果发现队列Q里没有消息可处理,则等待直到有消息可处理,而不是让消费者线程空转;
如果消费者线程处理一个消息所需时间为10微秒的话,而且生产者线程往Q里写消息的时间间隔远大于10微秒,那么,需要一个消息在队列Q里呆的平均时间不超过10微秒。

我目前在处理队列Q为空的情况下等待的一些方法:
1.sleep纳秒级
2.信号量
3.条件变量

均达不到需求!

谁有好的实现办法?谢谢!
[解决办法]
你在消费者线程里是不是这样的循环

for () {
如果消息队列为空
执行 sleep
}

如果是这样的话,可参考 windows message 中的
BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
阻塞的方式
[解决办法]
条件变量还满足不了要求吗,不太可能。

是不会用还是满足不了性能需求?
[解决办法]
信号量啊。
如果消费线程处理速度慢了导致消息积累,那就增加消费线程。
条件变量没试过,我的XP系统不支持。
[解决办法]
你在做什么系统?需要10微秒的精度?
[解决办法]
线程调度开销有那么低么?纳秒级?貌似一般的内核自旋锁才能有纳秒级的精度吧?

读书人网 >C++

热点推荐