03 高性能IO模型:采用多路复用机制的“单线程”Redis
本篇重点
三个问题:
“Redis真的只有单线程吗?”
“为什么用单线程?”
“单线程为什么这么快?”
- “Redis真的只有单线程吗?”
- 否,“单线程”指的是Redis的网络IO和键值对读写是由一个线程完成的[1]
- Redis的其他功能由额外线程完成:持久化、异步删除、集群数据同步等
- 网络IO和键值对读写即Socket编程中的如下步骤
- 网络IO:bind/listen、accept、parse、send/recv
- KV读写:GET/PUT...

- “Redis为什么用单线程?”
- 多线程的开销:共享资源的并发访问控制,互斥锁等待,导致并转串
- “单线程Redis为什么那么快?”
- 大部分操作在内存完成(硬件速度)
- 高效数据结构(哈希表、跳表等)
- IO多路复用机制:使其在网络IO中能并发处理大量客户端请求,实现高吞吐率
- 多路复用机制
网络操作的基本IO模型、潜在阻塞点(Redis采用单线程IO,若被阻塞将无法进行多路复用)
基本IO模型:

阻塞点:
accept()、recv()、send()Socket网络模型本身支持非阻塞模式
| 调用方法 | 返回套接字类型 | 非阻塞模式 | 效果 |
|---|---|---|---|
| socket() | 主动套接字 | ||
| listen() | 监听套接字 | 可设置 | accept()非阻塞 |
| accept() | 已连接套接字 | 可设置 | send()/recv()非阻塞 |
- 基于多路复用的高性能IO模型
- Linux多路复用机制——一个线程处理多个IO流,如
select/epoll - 基于多路复用的Redis高性能IO模型

- 在请求到达时,如何通知到Redis线程?
基于事件的回调机制(select/epoll提供)
事件被放入事件队列,Redis单线程对该事件队列进行处理。
QA
“Redis基本IO模型”中的潜在性能瓶颈?
图片来源于极客时间专栏《Redis核心技术与实战》
Redis6.0开始,将网络IO和键值对读写分开处理——网络请求解析线程(支持网络快速读写)、读写处理(主线程) ︎
03 高性能IO模型:采用多路复用机制的“单线程”Redis的更多相关文章
- Redis基础篇(二)高性能IO模型
我们经常听到说Redis是单线程的,也会有疑问:为什么单线程的Redis能那么快? 这里要明白一点:Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,这也是Redis对 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- 高性能IO模型浅析(彩图解释)good
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...
- 高性能IO模型浅析(转)
转自:http://www.cnblogs.com/fanzhidongyzby/p/4098546.html 是我目前看到的解释IO模型最清晰的文章,当然啦,如果想要详细的进一步了解还是继续啃蓝宝书 ...
- 【珍藏】高性能IO模型浅析
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...
- [转载] 高性能IO模型浅析
转载自http://www.cnblogs.com/fanzhidongyzby/p/4098546.html 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(B ...
- 转 高性能IO模型浅析
高性能IO模型浅析 转自:http://www.cnblogs.com/fanzhidongyzby/p/4098546.html 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: ( ...
- 【转载】高性能IO模型浅析
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...
- Linux 网络编程的5种IO模型:多路复用(select/poll/epoll)
Linux 网络编程的5种IO模型:多路复用(select/poll/epoll) 背景 我们在上一讲 Linux 网络编程的5种IO模型:阻塞IO与非阻塞IO中,对于其中的 阻塞/非阻塞IO 进行了 ...
随机推荐
- 利用NVIDIA NGC的TensorRT容器优化和加速人工智能推理
利用NVIDIA NGC的TensorRT容器优化和加速人工智能推理 Optimizing and Accelerating AI Inference with the TensorRT Contai ...
- CEVA引入新的可配置传感器集线器DSP架构
CEVA引入新的可配置传感器集线器DSP架构 CEVA introduces new configurable sensor hub DSP architecture 在一个将多个传感器设计成几乎所有 ...
- 接触追踪解决方案建立在UWB而不是蓝牙上
接触追踪解决方案建立在UWB而不是蓝牙上 Contact tracing solution builds on UWB rather than Bluetooth 几个月前,当社会距离明显成为对抗CO ...
- pytest基础简介及实践举例
一.pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰 ...
- 计算机网络-vlan划分
1.VLAN的划分 (1)基于端口的VLAN: 交换机A上的1,2端口和交换机B上的3,4端口构成一个VLAN. 交换机A上的3,4端口和交换机B上的1,2端口构成一个VLAN. (2)基于MAC地址 ...
- 使用IDEA创建Maven项目
一.创建一个普通的Maven项目 1.启动IDEA 2.创建一个Maven项目 3.Maven的目录结构 二.使用模板创建一个MavenWeb项目 1.启动IDEA 2.创建一个MavenWeb项目 ...
- Java8 Lambda表达式、Optional类浅析
1.概念 Lambda是一个匿名函数,可以将其理解为一段可以传递的代码(将代码像数据一样进行传递)可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使得java语言的表达能利得到了提升. 2. ...
- Netty 面试题 (史上最全、持续更新)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 面试官:一个TCP连接可以发多少个HTTP请求?
曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式.什 ...
- Linux网络基础TCP/IP
1.osi:七层 上三层,主要是用户层面;下四层是实际进行数据传输物理层: 设备之间比特流的传输,物理接口,电气特性等 端口号的作用 通过IP找到服务器,通过端口号找到具体哪个服务.网页服务的端口号是 ...