redis-io-nio

redis-io模型

单线程的程序有哪些?

nginx node.js redis

单线程为什么快

全是内存运算,数据都在内存里面.

On级别的命令有哪些?

注意事项

On级别的命令尽量少使用,会导致redis卡顿.

理解IO多路复用(事件驱动)

io阻塞

来多少个线程就夯住多少个,每个线程等到结果才会返回

io非阻塞

来多少个线程,都看能不能处理,不能立刻返回;

非阻塞 IO 在套接字对象上提供了一个选项Non_Blocking,当这个选项打开时,读写方法不会阻塞,
而是能读多少读多少,能写多少写多少。能读多少取决于内核为套接字分配的读缓冲区内部的数据字节数,
能写多少取决于内核为套接字分配的写缓冲区的空闲空间字节数。读方法和写方法都会通过返回值来告知程序实际读写了多少字节

事件轮询(多路复用)

多路复用API: select(linux->epoll)系统调用同事处理多个通道描述符的读写事件.(select在系统调用在描述符特别多的情况下性能会非常差).

指令队列

客户端的指令通过队列来排队进行顺序处理,先到先服务.

响应队列

redis 服务器通过响应队列来将指令的返回结果回复给客户端,
如果队列为空,那么意味着连接暂时处于空闲状态,不需要去获取写事件,
也就是可以将当前的客户端描述符从write_fds里面移出来。等到队列有数据了,
再将描述符放进去。避免select系统调用立即返回写事件,结果发现没什么数据可以写。
出这种情况的线程会飙高 CPU

学习记录

异步同步阻塞非阻塞

linuxIO 五种模型

进程切换

同步和异步的概念

1.同步与异步是站在消息通知机制角度来说的(同步可能需要时刻去关心询问线程处理结果,异步注册了回调机制,无需关心)
2.阻塞和非阻塞是站在线程等待调用结果的线程状态这个角度来说的,阻塞则是线程挂起等待调用结果返回;
非阻塞是在等待结果的过程中,线程任然是活动状态,可能处理其他的任务罢了。

redis的单线程

redis对外的网络请求服务是单线程的,在redis内部其他模块还是多线程的操作的,比如bgsave等等

redis的定时任务

java 的Timer使用的是最小堆,redis仅仅是链表遍历

来源

redis-io

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 6,445评论 0 9
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 8,918评论 0 5
  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 11,202评论 3 28
  • 前一阵子对自己的人生大刀阔斧的剪裁了一通,亲手戳破了许多白日梦。有如此决心,归功于以下道理:人生看似很长,实则苦短...
    水静花间阅读 1,807评论 0 0
  • 概念 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 消息服务中两个重要概念: 消息队列主要有两...
    a丶逍遥子阅读 3,401评论 0 0