编程少不了要学习I/O 模型,网上关于I/O 模型 的图不是特别清楚,顺便看了一下以前笔记,找出画的I/O的五种模型,拉出来发篇文章。
一、阻塞I/O:
特点:
进程全程阻塞等待,直到读写完成。
二、非阻塞I/O:
特点:
进程对读数据进行全程检测,发现数据没有准备好,就返回错误,接着对读数据进行检测,重复进行,直到读取到数据,这个过程是不阻塞的。如果系统调用的读数据做准备好了,这个时候就阻塞,然后把数据复制到用户内核空间,直到数据调用完成的过程,这个还是同步的过程。
三、I/O多路复用:
特点:
所谓多路复用,就是同时处理多个I/O请求,发现有一个请求准备好了,就不用等开始处理调用的请求数据,提高了同时处理I/O的能力。
四、异步 I/O:
特点:
进程发起一个异步I/O请求,立即返回,不用在原地等结果,这个时间可以做其它的事,内核完成I/O的两个阶段,如果请求完成,内核会给进程发送一个信号。
五、事件(信号)驱动I/O:
特点:
与I/0多路复用相比,它的优势是,免去了select的阻塞与轮询,当有活跃套接字时,由注册的handler处理。
通俗的讲:
进程发起调用,通过回调函数, 内核会记住是那个进程申请的,一直执行到第一段完成,就可以向这个进程发起通知,第一段进程是非阻塞的,进程不需要一直等了, 但是第二段依然是阻塞的。
下面是五种模型的对方比图:
本文是自己查看和学习以前的内容,如有纰漏请指正!
文章转载自月亮工作室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。