brpc
brpc copied to clipboard
请问服务端回response或者客户端发送request时所使用的WriteRequest链表为什么需要反转?
看实现是类似一个一个MPSC的无锁队列。 多个producer会通过exchange保证调用顺序和WriteRequest的插入顺序是一致的。在single consumer写之前,会找到old_head和new_head之间的WriteRequest进行链表反转,然后往fd里写出这一部分数据。
一般实现是:单纯的单链表,维护一个head和一个tail指针,producer在tail插入新的WriteRequest,而consumer在head处消费。
请问这样的一般实现和目前的实现相比,目前的实现会有哪些advantage么?是否目前的实现使得插入和消费实际上是在两个互不相干的链表上从而减少了需要race的场景?