我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java AIO学习的误解有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java AIO学习的误解有哪些

这篇文章主要介绍“Java AIO学习的误解有哪些”,在日常操作中,相信很多人在Java AIO学习的误解有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java AIO学习的误解有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

误解一

通过上表的比较可以看出 AIO 的性价比应该是优于 NIO 的,而实际情况却是大多数人更偏爱与 NIO,准确的说应该是偏爱 NIO  通信框架:Netty。这本无可厚非,Netty 确实是一款非常优秀的项目,可是很多人错误的解读了 Netty 在 Github 上关于不支持 AIO  的理由,这更加遏制了 AIO 的发展。

Not faster than NIO (epoll) on unix systems (which is true)

这句话表达的本意应该是:NIO 和 AIO 在 unix 系统上使用的都是 epoll 模式,本质都是一样的。但Not faster than  NIO在一定程度上会让人误解为 AIO 没 NIO 快。 这里可以采用假设的方式来论证这个观点是不成立的。

假设:

epoll 表现的性能为 x=100;

通信框架因为要解决并发调度与资源分配问题,对 epoll 进行封装后会存在一定的性能损耗,以 y 表示。

最终性能表现结果应该是 r=x-y。

论证:

某款 NIO 框架基于 epoll 封装后的性能损耗值:y=5,则它所发挥的最终性能为:x-y=95。

如果有一款 AIO 框架能将性能损耗值控制在:y=(0,5) ,那最终性能便高于 NIO 框架。如 y>5,则性能低于 NIO 框架。

结论:

以底层模型是 kqueue、epoll、select 还是 IOCP 来比较 NIO 和 AIO  的性能是不严谨的,决定权在于框架实现能挖掘出多少基础能力。否则同样采用 NIO 技术,为什么不同的框架还是会有高低之分。

误解二

Linux 系统的 AIO  还不成熟。如果是这个原因的话,不妨先看下:http://lse.sourceforge.net/io/aio.html,其中核心的一句话:Support for  kernel AIO has been included in the 2.6 Linux kernel.请注意,Linux 内核自 2.6  版本起已支持AIO模式。

这是个很奇怪的现象,似乎曾经不支持 AIO 就觉得永远不支持,曾经出现的 bug 就永远存在。正如 JAVA NIO 的空轮训 bug ,如今都已经发展到  Java 13 了,依旧还有人坚信这个 bug 一直在。坦白的讲,我没有去验证过 Java AIO 在 Linux 环境下是否是真正意义的 AIO,也没有复现出  NIO 的空轮训 bug。但如果因为某种原因放弃持续学习,那对于事物的认知和见识就只能停留在过去。

所以”Linux 系统的 AIO 还不成熟“也不会成为我抛弃 AIO 的理由。

误解三

需要为每一个连接预先分配读缓存。这个确实是客观存在的情况,AIO  的使用方式是调用读写接口将ByteBuffer对象注册进去,当事件完成后以回调的形式触发CompletionHandler,所以必须要事先分配好缓存空间。

但是有一个细节可能会被大家忽略掉,即便采用  NIO,当遇到半包/粘包的的情况,还是需要有一个缓存对象来暂存这份不完整的数据。尤其在高并发场景下,半包/粘包现象很容易加剧,此时 NIO 需要分配的缓存并不比  AIO 节省多少。

即使假设理想状态下并不存在半包/粘包问题,AIO 通信的预分配形式又能额外消耗多少内存。为每个连接分配 1024  字节的读缓存,在1万个并发连接的条件下也才消耗不到 10MB 内存,试问现实场景下一台 Java  应用服务器需要同时支撑多少个并发,1万?5万?10万?。

目前已知的通信框架通常会配备内存池,在这种前提下 AIO 也只是将内存池中的资源提前利用起来而已。在同等的内存池配置,相同的并发压力下,如果 AIO  暴露出内存方面的问题,我们再来做 AIO 和 NIO 的选择。

到此,关于“Java AIO学习的误解有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java AIO学习的误解有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java AIO学习的误解有哪些

这篇文章主要介绍“Java AIO学习的误解有哪些”,在日常操作中,相信很多人在Java AIO学习的误解有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java AIO学习的误解有哪些”的疑惑有所帮助!
2023-06-16

学习Java的作用有哪些

这篇文章主要讲解了“学习Java的作用有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“学习Java的作用有哪些”吧!1. JAVA薪资依然可观选择一份工作要么热爱要么向“钱”看,但是对于
2023-06-15

java的学习目标有哪些

这篇文章主要介绍了java的学习目标有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综
2023-06-03

学习java的网站有哪些

1、Stack overflowStack可能是编程界中非常流行的网站了 , 是一个与程序相关的 IT 技术问答网站,用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的 HTML 。一部分的程序员学习 API 或者编程语言 , 通常
学习java的网站有哪些
2019-05-07

Java学习目标有哪些

这篇文章给大家分享的是有关Java学习目标有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解U
2023-06-03

python学习中常见的误区有哪些

这篇文章主要介绍“python学习中常见的误区有哪些”,在日常操作中,相信很多人在python学习中常见的误区有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python学习中常见的误区有哪些”的疑惑有所
2023-06-27

学习Python遇到的编码错误有哪些

这篇文章主要讲解了“学习Python遇到的编码错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“学习Python遇到的编码错误有哪些”吧!1、误解Python范围python解析范围是
2023-06-16

学习Java语言的内容有哪些

这篇文章主要介绍“学习Java语言的内容有哪些”,在日常操作中,相信很多人在学习Java语言的内容有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”学习Java语言的内容有哪些”的疑惑有所帮助!接下来,请跟
2023-06-16

Java学习过程的重点有哪些

本篇文章给大家分享的是有关Java学习过程的重点有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java学习过程的重点主要说说Java的几大块吧,无法说得很细,因为其实每一
2023-06-03

Java学习必备书籍有哪些

这篇文章将为大家详细讲解有关Java学习必备书籍有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  基础  •《Head First Java》[1](推荐,豆瓣评分 8.7,1.0K+人评价): 可
2023-06-02

新手学习Java语言的要点有哪些

这篇文章主要讲解了“新手学习Java语言的要点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“新手学习Java语言的要点有哪些”吧!一、掌握静态方法和属性 静态方法和属性用于描述某一类对
2023-06-17

Java机器学习工具和库有哪些

小编给大家分享一下Java机器学习工具和库有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系
2023-06-17

学习Python的疑问有哪些

本篇内容介绍了“学习Python的疑问有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、Python2和Python3有什么区别?
2023-06-02

学习linux的建议有哪些

这篇文章主要介绍学习linux的建议有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、从基础开始   常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基的。例如:为什么我使用一个命令的时候,
2023-06-13

学习PHP的技巧有哪些

这篇文章主要介绍“学习PHP的技巧有哪些”,在日常操作中,相信很多人在学习PHP的技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”学习PHP的技巧有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-04

Python的学习方向有哪些

本篇内容介绍了“Python的学习方向有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、Python基础语法、python字符串解析、
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录