-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Pika 线程模型
Bert Young edited this page May 26, 2023
·
7 revisions
pika使用的是多线程模型,使用多个工作线程来进行读写操作,由底层blackwidow引擎来保证线程安全,线程分为12种:
- PikaServer:主线程
- DispatchThread:监听1个端口,接收用户连接请求
- WorkerThread:存在多个(用户配置),每个线程里有若干个用户客户端的连接,负责接收用户命令,然后将命令封装成一个Task扔到ThreadPool执行,任务执行完毕之后由该线程将reply返回给用户
- ThreadPool:线程池中的线程数量由用户配置,执行WorkerThread调度过来的Task, Task的内容主要是写DB和写Binlog
- PikaAuxiliaryThread:辅助线程,处理同步过程中状态机状态的切换,主从之间心跳的发送以及超时检查
- PikaReplClient:本质上是一个Epoll线程(与其他Pika实例的PikaReplServer进行通信)加上一个由若干线程组成的线程数组(异步的处理写Binlog以及写DB的任务)
- PikaReplServer:本质上是一个Epoll线程(与其他Pika实例的PikaReplClient进行通信)加上一个由若干线程组成的线程池(处理同步的请求以及根据从库返回的Ack更新Binlog滑窗)
- KeyScanThread:在这个线程中执行info keyspace 1触发的统计Key数量的任务
- BgSaveThread:对指定的DB进行Dump操作,以及全同步的时候发送Dump数据到从库(对一个DB执行全同步是先后向Thread中扔了BgSave以及DBSync两个任务从而保证顺序)
- PurgeThread:用于清理过期的Binlog文件
- PubSubThread:用于支持PubSub相关功能
- 安装使用
- 支持的语言和客户端
- 当前支持的Redis接口以及兼容情况
- 配置文件说明
- 数据目录说明
- info信息说明
- 部分管理指令说明
- 差异化命令
- Pika Sharding Tutorials
- Pika订阅
- 配合sentinel(哨兵)实现pika自动容灾
- 如何升级到Pika3.0
- 如何升级到Pika3.1或3.2
- Pika多库版命令、参数变化参考
- Pika分片版本命令
- 副本一致性使用说明
- Pika内存使用
- Pika最佳实践
- 整体架构
- 线程模型
- 全同步
- 增量同步
- 副本一致性
- 快照式备份
- 锁的应用
- nemo存储引擎数据格式
- blackwidow存储引擎数据格式
- Pika源码学习--pika的通信和线程模型
- Pika源码学习--pika的PubSub机制
- Pika源码学习--pika的命令执行框架
- Pika源码学习--pika和rocksdb的对接
- pika-NoSQL原理概述
- pika在codis中的探索
- Pika 笔记
- pika 主从同步原理