请在 下方输入 要搜索的题目:

单线程为什么这么快?

单线程为什么这么快?

发布时间:2025-07-21 19:36:24
推荐参考答案 ( 由 快搜搜题库 官方老师解答 )
联系客服
答案:
  •     第一点就是redis在内存上执行操作,然后加上高效的数据结构,例如哈希表和跳表等,可以实现高性能。
  •     另一方面,单线程的 Redis 也能获得高性能,跟多路复用的 IO 模型密切相关。
    •     最原始的时候是使用的等待队列类似于先来先服务的做法(BIO),但是如果有一个客户端阻塞的话会造成后续客户端服务的阻塞;这时候解决方案之一就是使用多线程,但是就会造成额外的开销;
    •     因此使用多路复用模型(NIO),select、poll、epoll都是NIO模型。不过select和poll都是基于轮询机制实现的,有些socket只是建立了连接,没有发送数据,就会造成空轮询,在高并发场景下效率不够高,select支持的最大连接数为1024,poll的则是无上限;而epoll模型,在linux内核中实现了一个红黑树用于注册每个fd,即每个socket,用一个双向链表用于记录每个已就绪的fd。epoll模型采用了事件监听机制,有三种事件,分别是服务端读、客户端读、客户端写。服务端读就是客户端建立新的连接,服务端要读一下socket的fd并注册到epoll的红黑树上;客户端读是说读取c端的redis命令;客户端写是说向c端写回指令执行结果。当监听到有就绪的fd的时候就会判断事件类型,进而执行相应处理函数。linux的epoll模型核心函数有三个,分别是epoll_create,用于初始化epoll,建立红黑树和双向链表就绪队列等;epoll_ctl,用于注册一个fd;epoll_wait,用于循环等待就绪的fd
    • epoll流程图
    • 65adc3249b42805651136e07404d7368
  •  
专业技术学习
专业技术学习
搜搜题库系统