java nio有哪些功能_如何真正理解java中的NIO?
从历史进程来看可能会比较好
早期计算机性能较差的情况下反正你同时也没法同时处理很多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?相关推荐
- 深入java虚拟机需要读吗_《深入理解Java虚拟机》读后总结(一)JVM内存模型
<深入理解Java虚拟机>读后总结 基于Sun HotSpot JVM 直接上图: 从图中看到,JVM内存分为两个主要区域,一个是所有线程共享的数据区,一个是线程隔离数据区(线程私有) 线 ...
- java 内存溢出的分类_【深入理解Java虚拟机】读后感:JVM内存划分与内存溢出小结...
扫码关注公众号:Java 技术驿站 发送:vip 将链接复制到本浏览器,永久解锁本站全部文章 [公众号:Java 技术驿站] [加作者微信交流技术,拉技术群] # JVM内存划分与内存溢出小结 # 1 ...
- java 虚拟机类型的卸载_《深入理解Java虚拟机》:类加载和初始化(二)
<深入理解Java虚拟机>:类加载和初始化(二) 在去年看<深入理解Java虚拟机>的时候,写过一篇关于类加载和初始化的博客,最近又在看这一块的知识,发现还是有很多东西没有理解 ...
- 深入了解java虚拟机编程心得体会_《深入理解Java虚拟机》– 对缓存的理解_零陵上将邢道荣的博客-CSDN博客...
原文作者:零陵上将邢道荣 原文标题:<深入理解Java虚拟机>-- 对缓存的理解 发布时间:2021-01-26 17:35:15 不才,笔者第一次学习缓存,是在学习redis的时候,是在 ...
- java实体类的功能_(转载) java实体类的作用
实体类其实就是俗称的POJO,这种类一般不实现特殊框架下的接口,在程序中仅作为数据容器用来持久化存储数据用的 POJO(Plain Old Java Objects)简单的Java对象 它的一般格式就 ...
- java 接口是抽象类吗_我是如何理解Java抽象类和接口的
在面试中我们经常被问到:Java中抽象类和接口的区别是什么?然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦;一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好像 ...
- java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器
线程上下文类加载器 线程上下文类加载器( Thread Context ClassLoader) 是从JDK1.2 引入的,类Thread 的getContextClassLoader() 与 set ...
- java虚拟机手动内存分配_《深入理解java虚拟机》-垃圾收集器与内存分配策略
如何判断对象已死? 引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器减1:其中计数器为0的对象是不可能再被使用的已死对象. 引用计数算法的实现很简单 ...
- java 1.8新增功能_睡觉时:新增的Java 8新增功能
java 1.8新增功能 自Java 8推出以来,最有趣的功能是什么? Java 8最近庆祝了它的第一个生日,其主要版本已经在一年多以前了. 这当然值得庆祝. 自从最初的Java 8版本问世以来,已经 ...
最新文章
- Automatically highlight current page in menu via Javascript
- 【周末阅读】2019自动驾驶十大关键词
- python中x y表示_Python中表达式x += y和x = x+y 的区别详解
- mysql数据库as表恢复_使用flashback database找回被误删除表空间
- 【题解】HNOI2008GT考试
- 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
- Java RMI 框架(远程方法调用)
- windows7下cmd中一键切换virtualenv中的Python版本
- neo4j cypher_Neo4j:Cypher –避免热切
- 兔子吃萝卜的c语言编程,狼追兔子的c语言实现
- seo自动发外链_一套节约成本全网营销方案-小小课堂SEO培训教程
- MyBatis整合Spring的实现(13)
- 美国高校开源迄今为止最大新冠肺炎CT数据集
- d - 数据结构实验之查找四:二分查找_【数据结构】资料
- PostgreSQL存储引擎源码分析五(原创,不断更新)
- Matlab基础知识
- IDEA中使用JUnit---java测试类
- C#批量转换Word文档为Pdf
- 大数据开发之Hive优化篇6-Hive on spark
- HBase集群出现NotServingRegionException问题的排查及解决方法
热门文章
- python输出运行时间表_Python编程第十二课 了解程序运行的时间
- 统计一行文本的单词个数_word操作技巧:不同情况的文字统计方法
- python中restful接口开发实例_Python RESTful接口开发02
- c++心形代码_c语言心形告白代码实现
- 665C. Simple Strings
- java socket 重连复用_Java Socket编程基础及深入讲解(示例代码)
- 服务器驱动精灵_驱动精灵真的可以帮你安装驱动吗?别再无脑装驱动了
- python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一
- linux内核编译后 make: 警告:检测到时钟错误.,系统时钟 make: 警告:检测到时钟错误。您的创建可能是不完整的。...
- android+3.0新加的动画,Android动画片