从历史进程来看可能会比较好

早期计算机性能较差的情况下反正你同时也没法同时处理很多io,不如开一个就阻塞在那边,程序员编程也省事,别的花里胡哨的骚操作还未必有这种方式性能高,这个叫做bio

后面cpu内存性能上去了,磁盘还那样,磁盘io成瓶颈了,就弄了新api出来,扫描出传输完毕数据就绪的io句柄进行操作,这里因为早期cpu核心数少,所以扫描出就绪的io句柄都是同步一个个执行的,这个叫nio

再后来,cpu核心数多了,发现这种按模式就是一核有难3核围观,就使用空间复杂度更高的实现方式把处理就绪io句柄异步分发到线程池里执行,这个叫做aio

同期,互联网用户的量上来了,然后网络通信占用的连接数指数增加,然后发现linux最早提供的把所有io句柄放在一个list里scan就绪io句柄的实现在1w链接情况下因为o(n)时间复杂度变成了性能瓶颈,于是就提供了一个基于二叉树实现的发现就绪句柄的api,叫做epoll

再后来,程序员把网络这块的性能反复挖掘,发现每次网络io数据都要从网卡拷贝到操作系统,然后操作系统再拷贝到应用内,应用内自身可能又被反复拷贝来拷贝去做处理,于是就弄出来各种框架,有用于应用内零拷贝的封装实现(netty的bytebuffer),有直接访问操作系统数据的零拷贝实现(堆外内存映射),甚至有框架直接旁路了操作系统,在应用层直接访问网卡数据(dpdk)

各种api基本上就是个填坑史

java nio有哪些功能_如何真正理解java中的NIO?相关推荐

  1. 深入java虚拟机需要读吗_《深入理解Java虚拟机》读后总结(一)JVM内存模型

    <深入理解Java虚拟机>读后总结 基于Sun HotSpot JVM 直接上图: 从图中看到,JVM内存分为两个主要区域,一个是所有线程共享的数据区,一个是线程隔离数据区(线程私有) 线 ...

  2. java 内存溢出的分类_【深入理解Java虚拟机】读后感:JVM内存划分与内存溢出小结...

    扫码关注公众号:Java 技术驿站 发送:vip 将链接复制到本浏览器,永久解锁本站全部文章 [公众号:Java 技术驿站] [加作者微信交流技术,拉技术群] # JVM内存划分与内存溢出小结 # 1 ...

  3. java 虚拟机类型的卸载_《深入理解Java虚拟机》:类加载和初始化(二)

    <深入理解Java虚拟机>:类加载和初始化(二) 在去年看<深入理解Java虚拟机>的时候,写过一篇关于类加载和初始化的博客,最近又在看这一块的知识,发现还是有很多东西没有理解 ...

  4. 深入了解java虚拟机编程心得体会_《深入理解Java虚拟机》– 对缓存的理解_零陵上将邢道荣的博客-CSDN博客...

    原文作者:零陵上将邢道荣 原文标题:<深入理解Java虚拟机>-- 对缓存的理解 发布时间:2021-01-26 17:35:15 不才,笔者第一次学习缓存,是在学习redis的时候,是在 ...

  5. java实体类的功能_(转载) java实体类的作用

    实体类其实就是俗称的POJO,这种类一般不实现特殊框架下的接口,在程序中仅作为数据容器用来持久化存储数据用的 POJO(Plain Old Java Objects)简单的Java对象 它的一般格式就 ...

  6. java 接口是抽象类吗_我是如何理解Java抽象类和接口的

    在面试中我们经常被问到:Java中抽象类和接口的区别是什么?然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦;一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好像 ...

  7. java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器

    线程上下文类加载器 线程上下文类加载器( Thread Context ClassLoader) 是从JDK1.2 引入的,类Thread 的getContextClassLoader() 与 set ...

  8. java虚拟机手动内存分配_《深入理解java虚拟机》-垃圾收集器与内存分配策略

    如何判断对象已死? 引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器减1:其中计数器为0的对象是不可能再被使用的已死对象. 引用计数算法的实现很简单 ...

  9. java 1.8新增功能_睡觉时:新增的Java 8新增功能

    java 1.8新增功能 自Java 8推出以来,最有趣的功能是什么? Java 8最近庆祝了它的第一个生日,其主要版本已经在一年多以前了. 这当然值得庆祝. 自从最初的Java 8版本问世以来,已经 ...

最新文章

  1. Automatically highlight current page in menu via Javascript
  2. 【周末阅读】2019自动驾驶十大关键词
  3. python中x y表示_Python中表达式x += y和x = x+y 的区别详解
  4. mysql数据库as表恢复_使用flashback database找回被误删除表空间
  5. 【题解】HNOI2008GT考试
  6. 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
  7. Java RMI 框架(远程方法调用)
  8. windows7下cmd中一键切换virtualenv中的Python版本
  9. neo4j cypher_Neo4j:Cypher –避免热切
  10. 兔子吃萝卜的c语言编程,狼追兔子的c语言实现
  11. seo自动发外链_一套节约成本全网营销方案-小小课堂SEO培训教程
  12. MyBatis整合Spring的实现(13)
  13. 美国高校开源迄今为止最大新冠肺炎CT数据集
  14. d - 数据结构实验之查找四:二分查找_【数据结构】资料
  15. PostgreSQL存储引擎源码分析五(原创,不断更新)
  16. Matlab基础知识
  17. IDEA中使用JUnit---java测试类
  18. C#批量转换Word文档为Pdf
  19. 大数据开发之Hive优化篇6-Hive on spark
  20. HBase集群出现NotServingRegionException问题的排查及解决方法

热门文章

  1. python输出运行时间表_Python编程第十二课 了解程序运行的时间
  2. 统计一行文本的单词个数_word操作技巧:不同情况的文字统计方法
  3. python中restful接口开发实例_Python RESTful接口开发02
  4. c++心形代码_c语言心形告白代码实现
  5. 665C. Simple Strings
  6. java socket 重连复用_Java Socket编程基础及深入讲解(示例代码)
  7. 服务器驱动精灵_驱动精灵真的可以帮你安装驱动吗?别再无脑装驱动了
  8. python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一
  9. linux内核编译后 make: 警告:检测到时钟错误.,系统时钟 make: 警告:检测到时钟错误。您的创建可能是不完整的。...
  10. android+3.0新加的动画,Android动画片