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

早期计算机性能较差的情况下反正你同时也没法同时处理很多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. 程序员必知的20个Python技巧
  2. ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
  3. 连接mysql的机制_安装成功后mysql 8.0不能连接navicat的解决方法
  4. CodedInputStream encountered an embedded string or message which claimed to have negative size.
  5. docker学习4-docker安装mysql环境
  6. 服务器的可维护性,可靠性和可维护性
  7. webpack4 es6转换
  8. Vivado生成bit文件布局失败解决
  9. 第一个帖子吧,我也博客了!
  10. atitit.软件开发概念--过滤和投影 数据操作
  11. Visual Studio Code如何打开多个tab标签
  12. 理解机器翻译模型 Transformer
  13. 《人生效率手册》学习总结
  14. SpringCloud学习路线
  15. 水星路由器怎么设置虚拟服务器,水星路由器怎么设置图解教程
  16. extjs3.0与extjs4.0区别
  17. 关于 傅里叶变换 的一些理解(通俗版)
  18. JDK内置并发框架AQS对CLH锁的优化
  19. js 监听键盘的enter键
  20. 送书 | 哈佛大学单细胞课程:笔记汇总前篇

热门文章

  1. centos6 5从命令行进入图形界面
  2. 1555C. Coin Rows
  3. sqlite管理工具_Liquibase 数据库版本管理工具:1.安装
  4. python绘画音频_人工智能下的音频还能这样玩!!!!
  5. 树莓派 蓝牙音响_你应该拥有一个树莓派
  6. html中 一条样式规则,css规则的基本格式是什么?
  7. c语言inline不起作用,C语言inline内联函数学习小结
  8. pin controller driver代码分析
  9. Qt 编码问题QTextCodec
  10. centos8 默认nginx路径_CentOS 8系统安装Nginx Web服务器及常见配置过程