美文网首页
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

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