IO 模型
Redis 是单线程的,为什么支持高并发?node.js,nginx 也是单线程的。
除了 Redis 数据是存在内存里面的,所有操作都是内存级别的,还有其它原因导致它有如此高的性能?
多路复用(事件轮训)
多路复用是一种 IO 模型,那系统中还有哪些 IO 模式?一起来看看吧
常见的 IO 模型
同步阻塞 IO(Blocking IO)
传统 IO 模型,请求 server,如果 server 没有返回,client 会一直等待,直到超时
同步非阻塞 IO(Non-blocking IO)
请求 server,无论是否成功,server 都会立刻返回结果
IO 多路复用(IO Multiplexing)
即 Reactor 设计模式,select/epoll 的好处就在于单个 process 就可以同时处理多个网络连接的 IO。它的基本原理就是 select/epoll 这个 function 会不断的轮询所负责的所有 socket,当某个 socket 有数据到达了,就通知用户进程。
现在操作系统多路复用 API 已经不再使用 select 系统调用,而改用 epoll(Linux)和 kqueue(FressBSD 和 MacOS)
异步 IO(Asynchronous IO)
即 Proactor 设计模式,client 发起 read 操作,就可以进行其它操作,server 操作成功会通知 client
参考:https://www.cnblogs.com/findu…