IO模型就是操做数据输入输出的方式,在Linux系统中有5大IO模型:阻塞式IO模型、非阻塞式IO模型、IO复用模型、信号驱动式IO模型、异步IO模型。 由于学习Netty必不可少的要了解IO多路复用模型,本篇是基础。编程
进程调用recvfrom函数,在数据没有返回以前,进程阻塞,直到数据返回后,才会处理数据。网络
进程调用recvfrom函数,若是数据没有准备好就返回错误提示,以后进程循环调用recvfrom函数,直到有数据返回。异步
进程调用select,若是没有套接字变为可读,则阻塞,直到有可读套接字以后,调用recvfrom函数,返回结果。socket
进程先注册信号驱动,以后进程不阻塞,当数据准备好后,会给进程返回信号提示,这时进程调用ecvfrom函数,返回数据。async
由POSIX规范定义,应用程序告知内核启动某个操做,并让内核在整个操做(包括将数据从内核拷贝到应用程序的缓冲区)完成后通知应用程序。这种模型与信号驱动模型的主要区别在于:信号驱动I/O是由内核通知应用程序什么时候启动一个I/O操做,而异步I/O模型是由内核通知应用程序I/O操做什么时候完成。函数
阻塞越少,理论上性能也越优。性能
所以在Linux下网络编程都以IO复用模型为主。学习
理解高性能网络模型 IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇).net