走进KeyDB( 二 )
http://
KeyDB项目是从redis fork出来的分支 。 众所周知redis是一个单线程的kv内存存储系统 , 而KeyDB在100%兼容redis API的情况下将redis改造成多线程 。
项目git地址:https://github.com/JohnSully/KeyDB
网上公开的技术细节比较少 , 本文基本是通过阅读源码总结出来的 , 如有错漏之处欢迎指正 。
多线程架构
线程模型
KeyDB将redis原来的主线程拆分成了主线程和worker线程 。 每个worker线程都是io线程 , 负责监听端口 , accept请求 , 读取数据和解析协议 。 如图所示:
KeyDB使用了SO_REUSEPORT特性 , 多个线程可以绑定监听同个端口 。
每个worker线程做了cpu绑核 , 读取数据也使用了SO_INCOMING_CPU特性 , 指定cpu接收数据 。
解析协议之后每个线程都会去操作内存中的数据 , 由一把全局锁来控制多线程访问内存数据 。
推荐阅读
- 和平精英|走进和平精英,军需宝箱全面更新,各新皮肤上线
- 魔兽世界|魔兽世界燃烧的远征----教你主城挂机每小时1000金
- 王者荣耀|明星都能走进小学课本,《王者荣耀》英雄,化身小学课本封面
- 金泰相|FPX惨败后队员坐上经济舱,糖小幽陪Doinb走进医院,粉丝破防了!
- 韩遂|三国杀:新武将胡车儿技能曝光,韩遂也终能走进军争模式
- 中消协|中消协:“双11”避开直播卖货的7个“坑”
- Find X2将搭载3K屏幕,网友:这才是旗舰该有的样子!
- 2020年疫情过后,最火最赚钱的六个行业
- 从头学习Linux基础
- 发票扫描识别 发票ocr识别