第一章 Java的IO演进之路

Unix中5种IO模型

  就网络通信而言,一次数据读入可以分为两个阶段,首先等待数据从网络中到达,到达后需要复制到内核的缓冲区中,第二个阶段是从内核的缓冲区复制到进程的缓冲区,复制到进程的缓冲区才算读取完毕。推广到所有IO,一次完整的IO读入分为两个阶段

  • 等待数据准备完毕
  • 把准备好的数据读到进程的内存空间

  各种IO模型的区别在于当一个进程读取的数据没有准备好的时候该进程如何应对

阻塞式IO

  等待数据准备阶段,进程会一直阻塞,直到数据准备好或者抛出异常。调用recvfrom默认是阻塞式调用,当fd对应的数据没有准备好recvfrom会一直阻塞。

非阻塞式IO

  recvfrom的非阻塞式调用,recvfrom对应的fd如果没有准备好数据,会返回EWOULDBLOCK,代表数据没有准备好,请求数据的进程不会阻塞而是立即返回。代表数据没有准备好。

IO复用模型 

  如果一个进程同时对多个fd感兴趣,可以把多个fd注册到select方法上,当注册的fd有数据准备好select会通知调用线程。广义而言这是一个阻塞模型,不同于阻塞IO,IO复用模型阻塞在select上,阻塞式IO阻塞在recvfrom上。 

  select的缺点在于如果轮询的文件描述符不够多,调用select的代价大于直接调用recvfrom的代价。且select能够同时监听的文件描述符的数量受限于内核的参数。

信号驱动IO模型

  当数据没有准备好的时候,调用进程直接返回。等数据准备好的时候通过一个信号通知调用进程。这种模型应该也是一种非阻塞的模型,毕竟在没有读到数据的时候进程没有阻塞。区别于上述非阻塞模型,这种模型只需要询问一次数据是否准备好,然后只需要等待信号通知而后再次调用recvfrom,而上述非阻塞模型需要在没有获得数据的时候一直循环读数据。

异步IO

  比信号驱动模型更高级,信号驱动模型中,进程在收到通知的是可以开始一个IO操作,异步IO模型中收到的通知是数据以及读取完毕。

  • 只有最后一种IO模型是异步的,前四种模型在真正的IO操作中会阻塞进程,异步IO收到信号后数据以及读到进程缓冲区了
  • 同步IO指在IO请求过程中进程阻塞,这个IO请求指的是在数据以及准备好了后真正执行recvfrom

 IO多路复用

  早期的IO多路复用技术采用select系统调用,由于select的一些固有缺陷如能够监听的最大文件数受限,后来采用epoll。其优点在于

  • 注册的fd不受限制,select默认最大能够注册的文件描述符为1024个
  • 效率不会因注册fd增多而降低。select会线性的扫描所有注册的fd,当注册的fd过一次线性扫描的时间会增加。epoll是一种“伪异步”,epoll依据fd上回调函数来实现。  

  

转载于:https://www.cnblogs.com/AshOfTime/p/10819785.html

CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值