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

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:  写文章的目的主要对书中的内容进行总结,同时加深记忆和理解。里面如有写的不对的地方对您造成误解,请多多保函。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值