1.高效的数据结构
2.单线程处理网络请求
首先并发不是并行.并发需要CPU频繁进行上下文切换很浪费时间.
如果我们i++,用单线程和多线程比较,会发现数据少的时候,单线程快,多的时候多线程快.所以并发不一定比单线程快.
上下文切换
多个线程可以执行在单核或多核CPU上,单核CPU也支持多线程执行代码,CPU通过给每个线程分配CPU时间片(机会)来实现这个机制。CPU为了执行多个线程,就需要不停的切换执行的线程,这样才能保证所有的线程在一段时间内都有被执行的机会。
此时,CPU分配给每个线程的执行时间段,称作它的时间片。CPU时间片一般为几十毫秒。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后切换到下一个任务。
但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。
哪多核CPU怎么办
官方解释:
CPU成为Redis性能瓶颈的情况并不常见,因为Redis通常会受到内存或网络的限制。
为了最大化CPU利用率,你可以在同一个节点中启动多个Redis实例,并将它们视为不同的Redis服务。在某些情况下,一个单独的节点可能是不够的,所以如果你想使用多个cpu,你可以开始考虑一些更早的分片方法。
注意:我们一直说的 Redis 单线程,只是在处理我们的网络请求的时候只有一个线程来处理,一个正式的Redis Server运行的时候肯定是不止一个线程的!
例如Redis进行持久化的时候会 fork了一个子进程 执行持久化操作
3.数据存于内存
从内存取数据,为什么比磁盘快.
从磁盘读取数据我们先要寻道.就是我们的探头要找到磁盘的位置.
然后我们要等磁盘旋转到我们需要的位置,在读取数据.称为旋转延迟
最后,磁头开始读取记录着磁盘上的数据,由于磁道上有一层磁性介质,当磁头扫过特定的位置,磁头感应不同位置的磁性状态就可以将磁信号转换为电信号。
无论是磁头的移动还是磁盘的转动,本质上其实都是机械运动,这也是为什么这种硬盘被称为机械硬盘,而机械运动的效率就是磁盘读写的瓶颈。
在内存中读取数据,本质上是电信号的传递,比机械运动传递信号要快得多。