分类
善良比聪明更重要
RPC 系列(十九):原子操作指令的选择 RPC 系列(十九):原子操作指令的选择
我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生 race condition。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。但在实践中,用原子指令写出正确的代码是一件非常困难的事,琢磨不透的 race c
2024-01-09
RPC 系列(十八):brpc 的线程本地存储 RPC 系列(十八):brpc 的线程本地存储
本文说明在 bthread 环境下直接使用 pthread-local 可能导致的问题,以及相应的规避方法。 thread-local 问题调用阻塞的 bthread 函数后,所在的 pthread 很可能改变,这使 pthread_get
2024-01-02
RPC 系列(十七):bthread_id 详解 RPC 系列(十七):bthread_id 详解
bthread_id 是一个特殊的同步结构,它可以互斥 RPC 过程中的不同环节,也可以在 O(1) 时间内找到 RPC 上下文(即 Controller)。注意,这里我们谈论的是 bthread_id_t,不是 bthread_t(bth
2023-12-26
RPC 系列(十六):何时该用 bthread RPC 系列(十六):何时该用 bthread
brpc 提供了异步接口,所以一个常见的问题是:我应该用异步接口还是 bthread? 提示:简短回答——延时不高时,你应该先用简单易懂的同步接口;不行的话用异步接口;只有在需要多核并行计算时才用 bthread。 为什么不首选回调式的
2023-12-19
RPC 系列(十五):bthread 是什么 RPC 系列(十五):bthread 是什么
bthread 是 brpc 使用的 M:N 线程库,目的是在提高程序的并发度的同时,降低编码难度,并在核数日益增多的 CPU 上提供更好的 scalability 和 cache locality。「M:N」是指 M 个 bthread
2023-12-12
RPC 系列(十四):brpc 的线程与协程 RPC 系列(十四):brpc 的线程与协程
线程模型是服务端编程的根基。在进入 brpc 的线程设计之前,先梳理几类常见的服务端线程模型:thread-per-connection、单线程 reactor(event-loop)、N:1 线程库、多线程 reactor 与 M:N 线
2023-12-05
RPC 系列(十三):brpc 全景 RPC 系列(十三):brpc 全景
互联网上的机器大都通过 TCP/IP 协议相互访问,但 TCP/IP 只是往远端发送了一段二进制数据,为了建立服务还有很多问题需要抽象。RPC 可以解决这些问题,它把网络交互类比为「client 访问 server 上的函数」:client
2023-11-28
RPC 系列导读:从 gRPC 实战到 brpc 内核的完整路径 RPC 系列导读:从 gRPC 实战到 brpc 内核的完整路径
这个系列把 RPC 的知识整理成了一条由浅入深的完整路径:从「RPC 与 gRPC 全景」的第一问开始,用一套 Go gRPC 教程跑通四种通信形态与超时、认证,再进入 gRPC 的高级专题,随后以 brpc 为主线深入一个工业级 RPC
2023-09-04
3 / 3