redis自学(14)阻塞IO与非阻塞IO

阻塞IO

顾名思义,阻塞IO就是两个阶段都必须阻塞等待:

 

 

调用revfrom函数的时候,内核没有数据,有两种处理结果,一个是返回失败的信息,一个是等待,而阻塞IO的选择是等待。

可以看到,阻塞IO模型中,用户进程在两个阶段都是阻塞状态。

非阻塞IO

顾名思义,非阻塞IOrecvfrom操作会立即返回结果而不是阻塞用户进程。

 

 

与阻塞IO不同的是,内核没有数据它不等待,而是返回失败,过一会儿再访问数据,这样往复循环,这期间内核还是会去硬件获取数据,终归有一次recvfrom内核会有数据,而用户应用在等待数据的阶段是非阻塞状态,但是在数据拷贝的阶段,非阻塞IO在此期间依然是阻塞状态。

非阻塞IO与阻塞IO相比,并没有什么提升,虽然在等待数据阶段是没有阻塞,但是一直盲目的轮询之外没做任何其他的事,反而因为不停地调用命令,使CPU的使用率暴增。所以并没有提升整个进程的性能,甚至可能还不如阻塞IO(指的是当前这个非阻塞IO的应用,如何用好,看IO多路复用)

posted @ 2024-03-08 17:35  蓝海的bug本  阅读(27)  评论(0编辑  收藏  举报