reactor模型
- 组成:非阻塞的I/O+I/O多路复用
- 特征:基于事件循环,以事件驱动或事件回调的方式实现业务逻辑
- 表述:将连接的I/O处理转化为事件处理
单reactor
使用1个epoll和1个线程
代表:redis 内存数据库 操作redis当中的数据结构
redis6.0多线程 处理数据的解压缩 数据压缩
放在多线程中处理resp协议 数据解压缩会损耗cpu 影响其他网络处理
单reactor+任务队列+线程池
解决网络连接和业务处理之间的相互影响,做任务队列来解耦,用线程池来消费
一个线程处理网络事件,多个线程处理任务队列,读到数据以后写到任务队列中,然后再交给线程池处理
多reactor
每个线程对应一个epoll reactor
接收连接的事件和处理读写事件进行分离
接收连接用一个epoll
处理一个读写是一个epoll
应用:memcached
多进程
每个worker进程都有一个reactor 谁拿到这把锁,就有处理连接的权利,可以解决惊群问题。
accept接收新的连接后,返回fd,交给epoll来处理,再将锁释放
多reactor+消息队列+线程池
业务场景中比较多 网络密集型+业务密集型