计算机体系结构
KIDGINBROOK
这个作者很懒,什么都没留下…
展开
-
brpc源码学习(一)-butex
由于brpc中引入了bthread,如果在bthread中使用了mutex,那么将会挂起当前pthread,导致该bthread_worker无法执行其他bthread,因此类似pthread和futex的关系,brpc引入butex来实现bthread粒度的挂起和唤醒。首先看下butex中使用到的FastPthreadMutex,FastPthreadMutex是基于futex实现的pthread粒度的锁,当竞争不激烈时,lock和unlock操作都是通过修改一个用户态的atomic来实现,只有当竞争激原创 2020-05-19 17:26:54 · 3651 阅读 · 4 评论 -
brpc源码学习(二)-bthread的创建与切换
brpc引入m:n的线程模型,固定的内核线程调度运行大量的bthread以避免内核线程上下文切换带来的开销。bthread类似协程,即用户态线程,bthread的切换不会陷入内核,不会进行一系列内存同步等耗时操作,因此bthread的切换在100-200ns,相比内核线程的微秒级别有着数量级的提升。为了实现协程需要协程栈,协程的初始化,以及协程间的切换,下面来逐一分析这几个过程。首先看下协程栈的结构,如下,context指向协程栈顶,stacktype表示栈的类型(大小),storage为栈空间原创 2020-05-29 15:36:57 · 3807 阅读 · 4 评论 -
cpu cache一致性及内存屏障
cpu和内存之间的速度存在着较大的差距,如果cpu直接和内存打交道的话,会因为等待内存处理而造成cpu资源的浪费,因此为了提高性能,现在cpu和内存之间有着多级缓存,常见的为三级缓存,L1,L2,L3,其中L1和L2为每个cpu独有,L3为所有cpu共享。cache line为cache的最小单位,也是cache和内存数据交换的最小单位,如64字节。当cpu要读取某地址的数据时,首先会去cac...原创 2019-11-18 17:59:12 · 1086 阅读 · 1 评论