## Linux面试问题汇总
Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别(超级重要)
一般来说,Linux下系统IO主要就是通过以下几个函数open(),close(),read(),write(),send(),recv(),lseek(),今天就以recv()为例来介绍下IO模型中的同步异步,阻塞非阻塞的区别。
同步、异步
同步:用户进程发起IO后,进行就绪判断,轮询内核状态。
异步:用户进程发起IO后,可以做其他事情,等待内核通知。
阻塞:用户进程访问数据时,如果未完成IO,调用的进程一直处于等待状态,直到IO操作完成。
非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成,此时进程可以操作其他事情。
Linux下的五种IO模型
阻塞I/O(blocking I/O)
非阻塞I/O(nonblocking I/O)
I/O复用(select和poll) (I/O multiplexing)
信号驱动I/O(signal driven I/O (SIGIO))
异步I/O (asynchronous I/O (the POSIX aio_functions))
Tip:前四种都是同步,只有最后一种才是异步I/O。