金阊企业建设网站公司,seo撰写网站标题以及描述的案例,电商品牌排行榜,淄博市 网站建设报价目录
一.前言
二.多线程的弊端 2.1 锁的开销问题 2.2 多线程上下文切换带来的额外开销 2.3 多线程占用内存成本增高
三.基本IO模型与epoll 模式
3.1 基本IO模型 3.2 单线程处理机制 四.总结 一.前言 我们经常讨论到#xff0c;redis 是单线程#xff0c;那为什么单线…目录
一.前言
二.多线程的弊端 2.1 锁的开销问题 2.2 多线程上下文切换带来的额外开销 2.3 多线程占用内存成本增高
三.基本IO模型与epoll 模式
3.1 基本IO模型 3.2 单线程处理机制 四.总结 一.前言 我们经常讨论到redis 是单线程那为什么单线程的性能还这么高能够达到 10w QPS。
二.多线程的弊端 2.1 锁的开销问题 多线程的使用需要我们注意共享资源的并发控制问题控制并发问题需要我们用锁机制加锁就会带来代码的可维护性和易调试的增大。 2.2 多线程上下文切换带来的额外开销 在单个处理器的时期操作系统就能处理多线程并发任务。处理器给每个线程分配 CPU 时间片Time Slice线程在分配获得的时间片内执行任务。
CPU 时间片是 CPU 分配给每个线程执行的时间段一般为几十毫秒。在这么短的时间内线程互相切换我们根本感觉不到所以看上去就好像是同时进行的一样。
时间片决定了一个线程可以连续占用处理器运行的时长。当一个线程的时间片用完了或者因自身原因被迫暂停运行了这个时候另外一个线程可以是同一个线程或者其它进程的线程就会被操作系统选中来占用处理器。这种一个线程被暂停剥夺使用权另外一个线程被选中开始或者继续运行的过程就叫做上下文切换Context Switch。
而多线程的上下文切换频繁的话会造成性能问题时间开销会变大。
为了避免以上问题redis采用了单线程模式 2.3 多线程占用内存成本增高 JVM里对象是堆里面的但是线程是独立空间当多线程的时候内存空间的成本就会有所增高。
三.基本IO模型与epoll 模式 通常来说单线程的处理能力要比多线程差很多但是 Redis 却能使用单线程模型达到每秒数十万级别的处理能力这是为什么呢其实这是 Redis 多方面设计选择的一个综合结果。主要体现在两点上
一方面Redis 的大部分操作在内存上完成再加上它采用了高效的数据结构例如哈希表和跳表这是它实现高性能的一个重要原因。
另一方面就是 Redis 采用了多路复用机制使其在网络 IO 操作中能并发处理大量的客户端请求实现高吞吐率。接下来我们就重点学习下多路复用机制。
3.1 基本IO模型 3.2 单线程处理机制 四.总结 1、大部分操作在内存完成 2、采用高效的数据结果比如哈希表和跳表 3、采用了IO多路复用机制使其在网络IO操作中能并发处理大量的客户端请求
注意在redis 6.0 单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能比如持久化、异步删除、集群数据同步等其实是由额外的线程执行的。