美文网首页
redis-io-nio

redis-io-nio

作者: zhangsanzhu | 来源:发表于2018-12-29 09:33 被阅读0次

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

相关文章

  • redis-io-nio

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

网友评论

      本文标题:redis-io-nio

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