redis自学(21)信号驱动IO和异步IO

信号驱动IO

信号驱动IO是与内核建立SIGIO的信号关联并设置回调,当内核有FD就绪时,会发出SIGIO信号通知用户,期间用户应用可以执行其它业务,无需阻塞等待

 

 

缺点:

  1. 当有大量IO操作时,信号较多,SIGIO处理函数不能及时处理可能导致信号队列溢出
  2. 而且内核空间与用户空间的频繁信号交互性能也较低

 

异步IO

异步IO的整个过程都是非阻塞的,用户进程调用完异步API后就可以去做其它事情,内核等待数据就绪并拷贝到用户空间后才会递交信号,通知用户进程。

 

 

可以看到,异步IO,用户进程在两个阶段都是非阻塞的状态

缺点:高并发的情况下,内核里积累的IO读写任务会越来越多,可能会导致整个系统因为内存占用过多而崩溃的现象,所以需要做好并发访问的限流,但是限流的工作和回调函数的机制,实现起来的代码复杂度就会高很多

同步和异步

IO操作是同步还是异步,关键看数据在内核空间与用户空间的拷贝过程(数据读写的IO操作),也就是阶段二,是同步还是异步:

 

 

posted @   蓝海的bug本  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示