bthread_id

了解bRPC bthread_id。

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

具体来说,bthread_id解决的问题有:

  • RPC技术中心响应的代码和发送代码产生竞争。
  • 设置计时器后很快触发了,超时处理代码和发送代码产生竞争。
  • 重试产生的多个响应同时回来产生的竞争。
  • 通过相关id(O(1)时间内找到对应的RPC(RPC)上下文,而无需建立从相关id(RPC)上下文的全局哈希表。
  • 取消RPC

上文提到的窃听器框架中广泛存在,下面我们来看下brpc线程id解决这些问题的。

bthread_id包括两部分,一个是用户可见的64μid另一个是对应的不可见的bthread::Id结构体。用户接口都是操作身份映射到结构体的方式和brpc中心其他结构类似:32位是内存池的位移,32英寸版本前者O(1)时间定位,后者防止美国律师协会

bthread_id的接口不太简洁,有不少应用程序编程接口:

  • 创造
  • 解锁
  • 解锁和存储
  • 参加
  • 错误

这么多接口是为了满足不同的使用流程。

  • 发送请求:bthread_id_create->bthread_id_lock->…注册计时器并发送RPC…->bthread _id_unlock
  • 接收响应:bthread_id_lock->。。进程响应->bthread_id_unlock_and_destroy
  • 异常处理流程:超时/套接字失败->bthread_id_error->on_error投资()、
    • 请求重试/备份请求:xi注册计时器并发送RPC->bthread_id_unlock
    • 无法重试,最终失败:b线程_解锁_和_存储
  • 同步等待RPC c束:bthread_id_join

为了减少等待,bthread_id做了一些优化的机制:

  • 错误发生的时候,如果bthread_id已经被锁住,会把错误信息提示一个挂起队列CN,bthread_id_error函数立即返回。当bthread_id_unlock等待队列里面有任务就取出来执行。
  • RPC(RPC)结束的时候,如果存在用户回调,先执行一个bthread_id_about_to_destroy,bthread_ id_lock操作立即失败,再执行用户回调这个可能耗时较长,不可控),最后再执行b线程_解锁_和_存储

上次修改时间:2024年5月6日更新index.md(66353dc)