【Java IO】IO的发展史之BIO、NIO、AIO - Go语言中文社区

【Java IO】IO的发展史之BIO、NIO、AIO


       任何事物的发展都是由不完善到更好的方向发展的,至于能不能发展到完善,我这里可以负责任的说:是不能的,因为随着时代的发展,任何过去时的研究成功不能总满足当下或将来的状况。这就像我们码农的 命运一样,昨天我们学习了Struts、hibernate等技术,几年后被Spring mvc、mybatis取代的时候,我们还要赶紧学习这些框架,谁也不知道明天会不会有个新的框架出来再取而代之。只有不断学习才不会被这个时代抛弃。

        IO的发展也类似,起初(jdk1.4之前)IO提供了字节流和字符流,但设计都是线程阻塞的,效率非常低下,jdk1.4开始对IO进行了改革,推出了同步非阻塞IO, 提供了 Channel、Selector、Buffer新的抽象,读写效率得到了提高。2011年,jdk1.7发布,AIO的出现,标志着IO的操作又进入一个新阶段。

        BIO(Blocking I/O):同步阻塞IO模式,数据读取或写入必须阻塞在一个线程内完成。 【以下摘自知乎:在此种方式下,用户进程在发起一个 IO 操作以后,必须等待 IO 操作的完成,只有当真正完成了 IO 操作以后,用户进程才能运行。

        NIO(New I/O):支持同步阻塞和非阻塞IO模式。同步非阻塞:【以下摘自知乎: 在此种方式下,用户进程发起一个 IO 操作以后 边可 返回做其它事情,但是用户进程需要时不时的询问 IO 操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的 CPU 资源浪费。

        AIO( Asynchronous I/O ): 异步非阻塞I/O模型(知乎中有人说java实现的不是异步非阻塞,而是异步阻塞,这里需要进一步考证)。 异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会阻塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

由于今天时间的问题,先整理这部分内容。后序会用实例说明每一种模式的操作方式。

转载于:https://my.oschina.net/u/3293327/blog/3036153

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_33725239/article/details/92381273
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:44:25
  • 阅读 ( 883 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢