redis自学(14)阻塞IO与非阻塞IO
阻塞IO
顾名思义,阻塞IO就是两个阶段都必须阻塞等待:
调用revfrom函数的时候,内核没有数据,有两种处理结果,一个是返回失败的信息,一个是等待,而阻塞IO的选择是等待。
可以看到,阻塞IO模型中,用户进程在两个阶段都是阻塞状态。
非阻塞IO
顾名思义,非阻塞IO的recvfrom操作会立即返回结果而不是阻塞用户进程。
与阻塞IO不同的是,内核没有数据它不等待,而是返回失败,过一会儿再访问数据,这样往复循环,这期间内核还是会去硬件获取数据,终归有一次recvfrom内核会有数据,而用户应用在等待数据的阶段是非阻塞状态,但是在数据拷贝的阶段,非阻塞IO在此期间依然是阻塞状态。
非阻塞IO与阻塞IO相比,并没有什么提升,虽然在等待数据阶段是没有阻塞,但是一直盲目的轮询之外没做任何其他的事,反而因为不停地调用命令,使CPU的使用率暴增。所以并没有提升整个进程的性能,甚至可能还不如阻塞IO(指的是当前这个非阻塞IO的应用,如何用好,看IO多路复用)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话