RPC 系列(十七):bthread_id 详解

bthread_id 是一个特殊的同步结构,它可以互斥 RPC 过程中的不同环节,也可以在 O(1) 时间内找到 RPC 上下文(即 Controller)。注意,这里我们谈论的是 bthread_id_t,不是 bthread_t(bthread 的 tid),这个名字起得确实不太好,容易混淆。

要解决什么问题

具体来说,bthread_id 解决的问题在其他 RPC 框架中广泛存在,下面我们来看下 brpc 是如何通过 bthread_id 解决这些问题的。

id 的表示与映射

bthread_id 包括两部分:一个是用户可见的 64 位 id,另一个是对应的不可见的 bthread::Id 结构体,用户接口都是操作 id 的。从 id 映射到结构体的方式和 brpc 中的其他结构类似:32 位是内存池的位移,32 位是 version,前者 O(1) 时间定位,后者防止 ABA 问题。

接口设计

bthread_id 的接口不太简洁,有不少 API,这么多接口是为了满足不同的使用流程。

系列导航


   转载规则


《RPC 系列(十七):bthread_id 详解》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
RPC 系列(十八):brpc 的线程本地存储 RPC 系列(十八):brpc 的线程本地存储
本文说明在 bthread 环境下直接使用 pthread-local 可能导致的问题,以及相应的规避方法。 thread-local 问题调用阻塞的 bthread 函数后,所在的 pthread 很可能改变,这使 pthread_get
2024-01-02
下一篇 
RPC 系列(十六):何时该用 bthread RPC 系列(十六):何时该用 bthread
brpc 提供了异步接口,所以一个常见的问题是:我应该用异步接口还是 bthread? 提示:简短回答——延时不高时,你应该先用简单易懂的同步接口;不行的话用异步接口;只有在需要多核并行计算时才用 bthread。 为什么不首选回调式的
2023-12-19
  目录