走进KeyDB( 五 )
int fdCmdWrite; //写管道
int fdCmdRead; //读管道
本地线程需要异步发送数据时 , 先检查client是否属于本地线程 , 非本地线程获取到client专属的线程ID , 之后给专属的线程管到发送AE_ASYNC_OP::CreateFileEvent
的操作 , 要求添加写socket事件 。 专属线程在处理管道消息时将对应的请求添加到写事件中 , 如图所示:
redis有些关闭客户端的请求并非完全是在链接所在的线程执行关闭 , 所以在这里维护了一个全局的异步关闭链表 。
锁机制
KeyDB实现了一套类似spinlock的锁机制 , 称之为fastlock 。
fastlock的主要数据结构有:
使用原子操作__atomic_load_2 , __atomic_fetch_add , __atomic_compare_exchange
来通过比较m_active=m_avail判断是否可以获取锁 。
fastlock提供了两种获取锁的方式:
推荐阅读
- 和平精英|走进和平精英,军需宝箱全面更新,各新皮肤上线
- 魔兽世界|魔兽世界燃烧的远征----教你主城挂机每小时1000金
- 王者荣耀|明星都能走进小学课本,《王者荣耀》英雄,化身小学课本封面
- 金泰相|FPX惨败后队员坐上经济舱,糖小幽陪Doinb走进医院,粉丝破防了!
- 韩遂|三国杀:新武将胡车儿技能曝光,韩遂也终能走进军争模式
- 中消协|中消协:“双11”避开直播卖货的7个“坑”
- Find X2将搭载3K屏幕,网友:这才是旗舰该有的样子!
- 2020年疫情过后,最火最赚钱的六个行业
- 从头学习Linux基础
- 发票扫描识别 发票ocr识别