-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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: