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

信号驱动IO

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

 

 

缺点:

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

 

异步IO

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

 

 

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

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

同步和异步

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

 

 

posted @ 2024-03-19 14:52  蓝海的bug本  阅读(12)  评论(0编辑  收藏  举报