通俗理解五种IO模型

时间:2022-02-10 01:09:26

五种IO模型

        什么是IO,read/write的时候是在IO,究竟做了什么?

        ①等,等IO事件就绪②数据拷贝,写入发送等操作实际不是这些系统调用做的,而是先将数据拷贝到缓冲区中,由系统来接手发送写入。

        IO = 等 + 数据拷贝。

1.阻塞式IO       

        这里用五个钓鱼佬的故事来解释五种IO模型。

        老赵喜欢钓鱼,一坐就是一整天,他亲历亲为,自己等鱼上钩(等待事件),自己在将鱼钓上来(数据拷贝)。

        这是阻塞式IO,我们最常见的IO,阻塞式等待。

2.非阻塞式IO       

        老钱也喜欢钓鱼,他不像老赵干干等着,他看到没有鱼鳔没有上下浮动,就去做其他的事情,偶尔会来检查下是否有鱼上钩,当有鱼上钩了,他会将鱼钓上来。

        这是非阻塞式IO,程序调用函数,该函数检查是否有事件就绪,没有就继续进行下一项任务,偶尔再来检查下是否就绪。非阻塞式轮询检测等待。

3.信号驱动式IO

        老孙也喜欢钓鱼,他有个高科技,他的鱼鳔上有个报警器,他将鱼钩扔进河流就不再管了,去做自己的事情,直到报警器响起,他才来将鱼钓上来。

        信号驱动式IO,当事件就绪,系统会向进程发送SIGIO的信号,进程会调用回调函数来处理IO。

4.多路复用IO

        老李酷爱钓鱼并财大气粗精力十足,他一下子买了10个钓鱼用具,都将这些用具同时甩进了河流中,同时等待这10个鱼鳔的响应,哪个上下浮动就去处理将鱼钓上来。

        多个事件都没有就绪,进程会被阻塞,轮询式检测事件,哪一个就绪就去处理哪一个。

        前面4个都属于同步IO模型。

5.异步IO        

        老周也喜欢钓鱼,他是一个老板,自己事情很忙,他告诉手下,他想钓鱼,他的手下就去钓鱼,钓鱼的全过程老周都没有参与,但是收获了鱼。

        在异步IO模型中,进程只需要告诉OS它要读取数据就立即返回,当数据就绪之后,OS会自动的将数据从内核空间拷贝到用户空间。