Netty权威指南-笔记1-IO模型

I/O基础

  • I/O网络模型简介
    • 阻塞I/O模型
    • 非阻塞I/O模型
    • I/O复用模型
    • 信号驱动I/O模型
    • 异步I/O模型

I/O网络模型简介

根据I/O模型的分类,一共提供了5中I/O模型,分别是1.阻塞I/O模型;2.非阻塞I/O模型;3.I/O复用模型;4.信号驱动I/O模型;5.异步I/O模型。

阻塞I/O模型

由用户进程调用recvform指令到内核空间,请求数据。在此期间,进程阻塞,等待内核返回数据包或者内核空间返回错误后,进程任务才会结束。

非阻塞I/O模型

由用户进程调用recvform到内核,如果内核无准备好的数据,则直接返回无数据准备好的指令给用户进程;用户进程会反复轮训调用recvform,知道内核返回数据或者内核返回错误。在轮训的过程中,进程可以处理其他任务,因此是非阻塞的。

I/O复用模型

Linux提供select/poll系统,用户进程发送FD(文件描述符)信号给select/poll系统,该系统可以接受一个或多个FD信号,通过顺序扫描FD信号来监听FD是否就绪,如果就绪,则返回可读条件,进程接收到可读条件后,发送recform命令请求数据。由于poll存在一些限制,Linux还提供了epoll系统调用。对比poll:1.使用poll,单个进程对于fd句柄有限制,默认值是1024,而epoll没有这个限制;2.select在连接数量很大的情况下,性能会线性下降,因为需要扫描所有的FD状态,而epoll只有活跃的socket会发起回调。

信号驱动I/O模型

系统调用sigaction到内核空间执行信号处理,调用立即返回。当数据准备就绪后,会给该进程生成SIGIO信号,通过信号回调应用程序,程序再调用recvfrom命令来读取数据。

异步I/O模型

系统通知内核发起操作,读取数据。内核首先准备数据,然后将数据从内核复制到用户对应的缓冲区,然后通知系统,整个操作已经完成。与信号驱动io的区别:信号驱动是内核准备好数据后,再通知进程发起读数据的操作,然后内核将数据复制到用户的缓冲区域,用户处理数据;而异步io则是发起读信号后,内核会将数据准备好并且放入到缓冲区后,再通知进程。

ps:  写文章的目的主要对书中的内容进行总结,同时加深记忆和理解。里面如有写的不对的地方对您造成误解,请多多保函。

你可能感兴趣的:(读书笔记)