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版本问世以来,已经 ...
最新文章
- 程序员必知的20个Python技巧
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- 连接mysql的机制_安装成功后mysql 8.0不能连接navicat的解决方法
- CodedInputStream encountered an embedded string or message which claimed to have negative size.
- docker学习4-docker安装mysql环境
- 服务器的可维护性,可靠性和可维护性
- webpack4 es6转换
- Vivado生成bit文件布局失败解决
- 第一个帖子吧,我也博客了!
- atitit.软件开发概念--过滤和投影 数据操作
- Visual Studio Code如何打开多个tab标签
- 理解机器翻译模型 Transformer
- 《人生效率手册》学习总结
- SpringCloud学习路线
- 水星路由器怎么设置虚拟服务器,水星路由器怎么设置图解教程
- extjs3.0与extjs4.0区别
- 关于 傅里叶变换 的一些理解(通俗版)
- JDK内置并发框架AQS对CLH锁的优化
- js 监听键盘的enter键
- 送书 | 哈佛大学单细胞课程:笔记汇总前篇
热门文章
- centos6 5从命令行进入图形界面
- 1555C. Coin Rows
- sqlite管理工具_Liquibase 数据库版本管理工具:1.安装
- python绘画音频_人工智能下的音频还能这样玩!!!!
- 树莓派 蓝牙音响_你应该拥有一个树莓派
- html中 一条样式规则,css规则的基本格式是什么?
- c语言inline不起作用,C语言inline内联函数学习小结
- pin controller driver代码分析
- Qt 编码问题QTextCodec
- centos8 默认nginx路径_CentOS 8系统安装Nginx Web服务器及常见配置过程