操作系统——文件系统

文件IO:阻塞IO/非阻塞IO

阻塞IO:当用户程序执行read,线程会被阻塞,一直等到内核数据准备好,并把数据从内核缓冲区拷贝到用户缓冲区。当拷贝过程完成,read才会返回。

非阻塞IO:read请求在数据没有准备好的情况下立刻返回,可以继续往下执行,但是这时候用户程序一直在轮询内核,直到数据准备好,内核将数据拷贝到应用程序缓冲区,read调用之后才可以获取结果。

多路IO复用:应用程序每次都轮询内核的IO是否准备好,有点傻,因为在轮询的过程中,应用程序只能循环,啥也做不了。

为了解决这种傻乎乎轮询问题,多路IO复用技术出现了,如select/poll。通过IO事件分发,当内核准备好数据,再以事件的形式,通知应用程序进行操作。

同步IO:阻塞IO、非阻塞IO、多路IO复用。因为他们在read的过程中,内核将数据从内核区拷贝到用户空间的这个过程都需要等待,也就是这个过程是同步的。

异步IO:当发起aio_read之后,就立即返回,内核自动将数据从内核空间拷贝到用户空间,这个拷贝过程是异步的,内核自动完成,和前面的同步不同,异步的应用程序并不需要主动发起拷贝动作。

IO分为两个过程:(1)数据准备过程(2)数据从内核空间拷贝到用户进程缓冲区过程。

阻塞IO会阻塞在过程1和过程2。非阻塞IO和多路复用IO只会阻塞在过程2。这三者都是同步IO。

异步IO则不同,过程1和过程2都不会阻塞。

 

上一篇:百问网7天物联网智能家居(第三天)


下一篇:ClickHouse在大数据领域应用实践