美文网首页
Redis单线程模型

Redis单线程模型

作者: 第四单元 | 来源:发表于2020-03-22 16:28 被阅读0次

Redis是单线工作的,但他为什这么快呢?
多路IO机制是什么?有几种实现方式?他们的区别是什么?

为什么这么快:
基于内存操作、专门设计的数据结构、单线程没有线程切换开销、多路IO复用机制

多路IO复用是什么:
一个redis服务端可以同时处理多个客户端请求,每个请求都有一个socket。多路指的是多个IO流,
复用复用的redis单线程。
操作系统提供了select、poll、epoll三种多路IO复用机制,他们可以用来监控多个IO流,当有IO就绪时
唤醒进程进行处理。

与多线程、进程相比,多路IO复用不用开辟多个线程、进程,减少了系统开销

流:可以进行IO操作的对象,如socket等
每个流都有一个文件描述符。select\poll\epoll可以用来监控这些文件描述符是否就绪,就绪时唤醒线程进行处理。
select\poll\epoll是系统调用,内核可以知道哪些流就绪了,内核可以调度线程。

非阻塞IO、阻塞IO
阻塞:

select最多可以处理1024个文件描述符,它只通知有就绪的流,还需要程序每次去遍历来确定哪个流就绪了,
这样当每次只有少量流就绪时,就会浪费很多时间。
poll与select相比可处理的文件描述符的数目没有限制,其它缺点都具有。
epoll,解决了每次需要遍历流的问题,且不需要文件描述符在用户态和内核态之间的来回复制,只需要复制
一次就可以了。它每次返回就绪的流,直接处理就可以了。

poll和select的缺点:包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大

从select那里仅仅知道了,有I/O事件发生了,但却并不知道是那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。

epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll之会把哪个流发生了怎样的I/O事件通知我们。此时我们对这些流的操作都是有意义的。

select的几大缺点:

(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大

(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大

(3)select支持的文件描述符数量太小了,默认是1024

相关文章

  • Redis学习之旅~原理篇

    内容依旧来自 核心原理 线程IO模型 单线程非阻塞IO redis是单线程模型。redis的...

  • java面试宝典 redis和分布式锁

    redis 是基于key-value的内存高速缓存数据库 redis 是单线程模型 redis 是单线程模型为什么...

  • Redis 到底是单线程还是多线程?我要吊打面试官

    1、Redis 单线程到底指什么? 没错,大家所熟知的 Redis 确实是单线程模型,指的是执行 Redis 命令...

  • Redis高级应用总结

    Redis的线程模型 Redis是单进程单线程的,但是使用的是单线程非阻塞的多路IO复用的模型。多线程模型会导致线...

  • Redis单线程原理

    redis单线程模型很多人都知道的一个点,但是redis为什么采用单线程,很多人都不是很清楚,同时redis单线程...

  • redis-io-nio

    redis-io模型 单线程的程序有哪些? nginx node.js redis 单线程为什么快 全是内存运...

  • Redis线程模型

    彻底搞懂Redis的线程模型了解redis的单线程模型工作原理 文件事件处理器 Redis基于Reactor模式开...

  • Redis 异步化组件模型

    Redis 异步化组件模型 Redis 线程体系 Redis可以说是基于单线程模型的,因为对于客户端的所有读写请求...

  • Redis汇总

    1. redis 数据类型 string, list, hash ,set,zset 2. redis 单线程模型...

  • 阿里JAVA面试题剖析:Redis 和 memcached 有什

    面试原题 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程...

网友评论

      本文标题:Redis单线程模型

      本文链接:https://www.haomeiwen.com/subject/fhmwnftx.html