Support A Multiple Producer, Single Consumer Queue#2492
Conversation
|
LGTM |
|
@chenBright 这个对列,消费者是需要轮询吗? |
|
需要主动调出队的接口 |
|
如果对列没有内容,不会阻塞,需要轮询,或者自己实现一个唤醒的方式,是这样吧。 |
|
是的,没有同步机制。如果有需求,可以加一个同步机制吧。 |
|
@chenBright PR里面我提了点问题,你有时间帮忙看看。 |
好像没看到 |
_cur_enqueue_node看上去每次执行都要设置成NULL,这个是必要的吗? |
|
确实没有必要,改成 之前排查问题的时候在profiler采样场景下用了。 |
有同步的需求吗? |
那我来改一下也行。 |
我琢磨了一下,同步应该用户自己实现,在这个mpsc里面不好做,因为不同用户的判断逻辑会很不一样。 |
|
用户自己实现更灵活。 mpsc提供同步机制应该也不复杂,抽象一个同步基类作为mpsc模板参数,让用户传决定实现wait和wakeup(一般就是pthread实现和bthread实现,这两个可以由框架提供实现)。入队之后是队头且有waiter,就唤醒waiter。出队时没有数据就wait。 |
|
你实现的这个无锁队列,理论上性能很好的,不希望这个唤醒影响到性能。 我建议这块不要做了,让用户自己去实现,因为场景不同,不太能很好的支持。比如,我们这边消费者可能是个异步的动作,判断消费者是否完成这些任务,不光要判断Dequeue是否返回false,还得有自己的逻辑判断那些异步请求是否都执行完了。 |
|
What problem does this PR solve?
Issue Number:
Problem Summary:
What is changed and the side effects?
Changed:
使用ExecutionQueue的相关技术实现一个多生产者单消费者的无锁队列。
Side effects:
Performance effects(性能影响):
Breaking backward compatibility(向后兼容性):
Check List: