05-Java NIO 编程 零拷贝 与 AIO

零拷贝是网络编程中的关键技术,许多性能优化都离不开它。在java程序中,常用的零拷贝技术包括mmap(内存映射)和sendfile。那么,这些技术在操作系统中的设计是怎样的呢?我们将分析mmap和sendfile这两种零拷贝技术,并探讨nio中如何使用零拷贝来优化传统io的数据读写。

05-Java NIO 编程 零拷贝 与 AIO传统IO模型05-Java NIO 编程 零拷贝 与 AIODMA : direct memory access 直接内存拷贝( 不使用CPU )

mmap优化通过内存映射,mmap将文件映射到内核缓冲区,同时用户空间可以共享内核空间的数据。这样,在进行网络传输时,就可以减少内核空间到用户空间的拷贝次数,如下图所示:

05-Java NIO 编程 零拷贝 与 AIOmmap示意图

sendFile优化在Linux 2.1版本中引入了sendFile函数,其基本原理如下:数据根本不经过用户态,直接从内核缓冲区进入到Socket Buffer。由于与用户态完全无关,这就减少了一次上下文切换。示意图和小结如下:

立即进入“豆包AI人工智官网入口”;

立即学习“豆包AI人工智能在线问答入口”;

05-Java NIO 编程 零拷贝 与 AIOsendFile示意图

提示:零拷贝从操作系统的角度来看,是没有CPU拷贝的。在Linux 2.4版本中,进行了修改,避免了从内核缓冲区拷贝到SocketBuffer的操作,直接拷贝到协议栈,从而再次减少了数据拷贝,如下图和小结所示:

05-Java NIO 编程 零拷贝 与 AIOsendFile优化后的示意图

这里其实有一次CPU拷贝(Kernel buffer -> socket buffer),但拷贝的信息很少,比如length和offset信息,可以忽略。

零拷贝的再次理解我们所说的零拷贝,是从操作系统的角度来说的,因为内核缓冲区之间没有数据是重复的(只有kernel buffer有一份数据)。零拷贝不仅带来了更少的数据复制,还能带来其他的性能优势,例如更少的上下文切换,更少的CPU缓存伪共享以及无CPU校验和计算。

mmap和sendFile的区别如下:

mmap适合小数据量读写,sendFile适合大文件传输。mmap需要4次上下文切换,3次数据拷贝;sendFile需要3次上下文切换,最少2次数据拷贝。sendFile可以利用DMA方式减少CPU拷贝,而mmap则不能(必须从内核拷贝到Socket缓冲区)。

零拷贝案例需求:使用传统IO方法传递一个大文件,使用NIO零拷贝方式(transferTo)传递一个大文件,并比较两种传递方式的耗时。

以下是服务器端的代码:

package com.dance.netty.nio.demo.zerocopy;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;public class ZeroCopyServer {    public static void main(String[] args) throws Exception {        InetSocketAddress inetSocketAddress = new InetSocketAddress(7001);        ServerSocketChannel open = ServerSocketChannel.open();        open.socket().bind(inetSocketAddress);        for (;;){            SocketChannel accept = open.accept();            int countSize = 0;            ByteBuffer allocate = ByteBuffer.allocate(4096);            while (-1 != countSize){                countSize  = accept.read(allocate);                allocate.rewind(); // 倒置 position=0 Mark 作废            }        }    }}

以下是客户端的代码:

package com.dance.netty.nio.demo.zerocopy;import java.io.File;import java.io.FileInputStream;import java.net.InetSocketAddress;import java.nio.channels.FileChannel;import java.nio.channels.SocketChannel;import java.time.Duration;import java.time.Instant;public class ZeroCopyClient {    public static void main(String[] args) throws Exception {        SocketChannel open = SocketChannel.open();        boolean connect = open.connect(new InetSocketAddress(7001));        // 获取文件Channel        File file = new File("src/main/resources/01.jpeg");        FileChannel channel = new FileInputStream(file).getChannel();        Instant startTime = Instant.now();        /*          * 在Linux下,一个transferTo方法就可以传输完成         * 在Windows下,调用一次transferTo 只能传输8M,就需要分段传输文件,而且要记录传输时的位置         * transferTo 底层使用零拷贝         */        long l = channel.transferTo(0, channel.size(), open);        System.out.println(l);        Instant endTime = Instant.now();        System.out.println("用时:" + Duration.between(startTime,endTime).toMillis() + "ms");        channel.close();    }}

执行结果如下:

6806用时:3ms

零拷贝博客链接:https://www.php.cn/link/5b4e256d43c2e28b425581832a4e0a09

我认为这篇博客写的非常不错。

AIO基本介绍:JDK7引入了Asynchronous I/O,即AIO。在进行IO编程时,常用到两种模式:Reactor和Proactor。Java的NIO就是Reactor模式,当有事件触发时,服务器端得到通知进行相应的处理。AIO,即NIO2.0,称为异步非阻塞IO,AIO引入了异步通道的概念,采用了Proactor模式,简化了程序编写,有效的请求才启动线程。其特点是,先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多,且连接时间较长的应用。目前AIO还没有广泛应用,Netty也是基于NIO,而不是AIO,因此就不在这里详细讲解AIO了。有兴趣的可以参考以下链接:

BIO、NIO和AIO对比图:

05-Java NIO 编程 零拷贝 与 AIO

举例说明:

同步阻塞:到理发店理发,就一直等着,直到轮到自己理发。同步非阻塞:到理发店理发,发现前面有其他人,给理发师说一下先干其他事情,一会过来看是否轮到自己。异步非阻塞:给理发师打电话,让理发师上门服务,自己干其他事情,理发师上门通知,来你家给你理发。

NIO完结撒花花。

以上就是05-Java NIO 编程 零拷贝 与 AIO的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/31479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月3日 23:31:00
下一篇 2025年11月3日 23:31:35

相关推荐

  • Remittix(RTX)预售势头势头,因为投资者在$ 600B汇款市场中的目标中断

    莱特币和remittix正在引起人们的关注,因为在渴望真正的公用事业的市场中,高级潮汐发挥了作用。 xrp价格预测表明,如果法律清晰度降落, 在加密货币市场中,对具有清晰效用的代币产生了新的兴趣,莱特币和Remittix随着高层播放而引起关注。尽管XRP价格预测正在加热,因为法律清晰度可以释放出强大…

    2025年12月7日
    000
  • LINK币未来如何?2025-2031年Chainlink(LINK)币价格预测

    目录 Chainlink(LINK)币概述Chainlink(LINK)币价格预测:技术分析Chainlink(LINK)币价格分析每日图表上的LINK币价格分析4小时图表上的LINK币价格分析LINK币技术指标:水平和行动每日简单移动平均线 (SMA)每日指数移动平均线 (EMA) Chainli…

    2025年12月7日 好文分享
    000
  • SXT币爆发在即?深度揭秘数据协议项目新宠!

    目录 一、为什么智能合约“看不清”?二、SXT 到底在做什么?代币是干嘛的?三、SXT 代币的作用,简单说两个:四、在当下阶段,这样的机制为什么重要?五、总结:SXT 的潜力值不值得继续关注? 最近,一个名叫 space and time(sxt) 的项目上线了币安,引发了不少讨论。网上很多解读偏“…

    2025年12月7日
    000
  • 什么是Hifi Finance(HIFI)币?HIFI代币信息和代币经济学概述

    目录 什么是Hifi Finance(HIFI)币?背景资料Hifi Finance 的功能借款贷款流动性Hifi Finance 如何运作?借款流程贷款流程Hifi代币是什么?HIFI代币信息和代币经济学HIFI 币未来会达到10 美元吗?总结 defi 不仅局限于交易、兑换和加密货币,它还可以通…

    2025年12月7日 好文分享
    000
  • 喜报Bold Technologies与My Aion推出25亿美元智慧城市AI平台

    总部位于阿布扎比的bold technologies(bold控股公司的子公司)与国际人工智能公司my aion合作,推出了一项价值25亿美元的智慧城市计划,旨在通过ai技术改造城市基础设施。 两家公司宣布开发一个名为Aion Sentia Cognitive City的平台,用于管理复杂的城市系统…

    2025年12月7日
    000
  • Link币价格预测2025年-2025年:Link币未来会涨到多高?

    chainlink 是一个去中心化的预言机网络,连接智能合约和现实世界数据,使链外信息的交互安全可靠。chainlink 通过防止未经授权的访问和数据验证,增强了 defi、游戏、保险及其他区块链技术行业的功能。 如果你打算研究 chainlink 的价格预测,就必须分析市场动态以做出明智选择。本文…

    2025年12月7日
    100
  • Bybit虚拟卡有效期多长?Bybit虚拟卡一直审核中怎么办?

    bybit虚拟卡是一款功能强大且安全可靠的虚拟货币借记卡,可以让投资者更便捷地使用虚拟货币进行消费。当前bybit虚拟卡没有任何开户门槛,并且也支持大陆用户在线开通,另外不收取任何开卡费用、不收取年费管理费等等多个优势,因此是当下最热门的借记卡之一。当用户拥有bybit虚拟卡之后,最关注的一个问题有…

    2025年12月7日
    000
  • 虚拟币有多少个品种 虚拟币有哪些

    虚拟币种类繁多,超过10,000种:1.比特币(BTC)是市值最高的加密货币,具有去中心化和高安全性;2.以太坊(ETH)支持智能合约和DApps开发;3.瑞波币(XRP)用于金融机构跨境支付;4.莱特币(LTC)被称为“数字白银”,区块生成时间短;5.比特币现金(BCH)旨在提高交易速度和降低费用…

    2025年12月7日
    000
  • 一文看懂什么是虚拟币 虚拟币有什么用

    虚拟币是使用密码学原理确保交易安全的电子货币。1. 比特币是最著名的虚拟币。2. 以太坊提供去中心化应用平台。3. 莱特币交易速度快。4. 瑞波币用于跨境支付。 什么是虚拟币 虚拟币,又称数字货币,是指使用密码学原理来确保交易安全及控制交易单位创建的电子货币。虚拟币的概念最早可以追溯到20世纪90年…

    2025年12月7日
    000
  • 虚拟币市值前十的是哪些 市值前十的虚拟币盘点

    市值前十的虚拟币分别是:1. 比特币(BTC),2. 以太坊(ETH),3. 泰达币(USDT),4. 币安币(BNB),5. 美元币(USDC),6. 瑞波币(XRP),7. 卡尔达诺(ADA),8. 狗狗币(DOGE),9. 索拉纳(SOL),10. 波场(TRX)。这些虚拟币各具特色,从比特币…

    2025年12月7日
    000
  • 世界上最值钱的虚拟币top10 最值钱的虚拟币是哪些

    世界上最值钱的虚拟币Top10包括:1.比特币,2.以太坊,3.泰达币,4.币安币,5.卡尔达诺,6.狗狗币,7.波场,8.莱特币,9.波尔卡adot,10.索拉纳。这些虚拟币在市场上具有较高的市值,并在区块链技术和应用场景上展现出巨大的潜力。 世界上最值钱的虚拟币Top10包括许多备受瞩目的加密货…

    2025年12月7日
    000
  • 虚拟币市值top10盘点 虚拟币市值最高的是哪些

    虚拟币市值最高的是比特币(BTC)、以太坊(ETH)和泰达币(USDT)。1.比特币市值最高,因其去中心化和有限供应。2.以太坊次之,支持智能合约和DApps。3.泰达币是稳定币,与美元挂钩,流动性高。 在虚拟货币市场中,市值是衡量一个虚拟币的重要指标之一。市值越高的虚拟币通常意味着其流动性更好,接…

    2025年12月7日
    000
  • NFT与代币有什么区别?NFT与代币差异的简单指南

    目录 什么是代币?代币类型什么是 NFT?NFT 的主要特点NFT 与代币:主要区别现实世界的例子为什么重要结论 什么是代币? 代币是在区块链上创建的数字资产。它们可以代表各种事物,例如货币、访问权限,甚至是项目中的投票权。代币通常具有可互换性,这意味着每个代币都与其他代币相同。例如,一个比特币的价…

    2025年12月7日
    000
  • 一文盘点判断比特币BTC是否接近周期顶部的指标有哪些

    摘要 众所周知,比特币市场周期顶部的预测非常困难,但结合技术指标和行为指标可以提供强有力的信号。 MVRV-Z 评分、Pi 周期顶部指标、交易量趋势、Puell 倍数和交易所流入量可以准确预测比特币价格周期顶部。 BTC 可能正接近其当前市场周期的最后阶段——先是剧烈的反弹,随后是大幅回调,最终进入…

    2025年12月7日 好文分享
    000
  • 虚拟币名称一览表 常见的虚拟币叫什么

    常见的虚拟币包括:1.比特币(BTC),首个加密货币;2.以太坊(ETH),支持智能合约的平台;3.莱特币(LTC),改进比特币的快速交易币种;4.比特币现金(BCH),解决比特币网络拥堵的分叉币;5.瑞波币(XRP),用于金融机构跨境支付;6.卡尔达诺(ADA),注重安全和可扩展性的第三代区块链;…

    2025年12月7日
    000
  • 抹茶交易所APPv6.1.43官方下载

    抹茶交易所APPv6.1.43可通过官方网站下载,支持多币种交易并提供多重安全措施。1.访问官方网站,找到并点击“下载APP”链接。2.选择Android或iOS版本下载。3.安装后,完成注册或登录。该版本提供快速交易、实时行情、多币种支持、安全措施和便捷存取款功能。 抹茶交易所APPv6.1.43…

    2025年12月7日
    000
  • 2025年度前十加密货币交易所排行榜出炉 可靠货币交易所排名

    2025可靠安全的货币现货交易平台有:1、币安,交易对丰富,费用低廉,高级交易功能;2、HTX火币,多种交易对,低交易费用,友好的用户界面;3、OKX,多种交易对,低交易费用,多种交易工具;4、Coinbase;5、Kraken… Binance 2025Binance币安 | 一键直达…

    2025年12月7日 好文分享
    000
  • 世界自由金融支持小型纪念品,推动USD1采用

    world liberty financial已正式宣布了对buildon(b)项目的支持,旨在支持该团队的发展工作。 宣布对Buildon(b)的支持,并进行了代币的购买,以帮助开发项目。 World Liberty Financial已通过战略代币购买宣布对Buildon(B)的支持。该公司还推…

    2025年12月7日
    000
  • Tirupati Temple使用面部识别技术来增强朝圣体验

    管理尊敬的venkateswara庙的tirumala tirupati devasthanams(ttd)正在旨在整合人工智能(ai)和面部识别技术 一位官员周四表示,管理Venkateswara庙的Tirumala Tirupati Devasthanams(TTD)将整合人工智能(AI)和面部…

    2025年12月7日
    000
  • 2025全球十大数字货币交易所排行 最值得信赖的十大交易所

    全球十大数字货币交易所不仅提供安全的交易环境,还具备高效的交易机制和丰富的交易产品。本文将为您详细介绍2025年最值得信赖的十大数字货币交易所排行,其中第一名是okx,第二名是binance,第三名是火币。这些交易所在全球范围内拥有广泛的用户基础和良好的口碑,接下来我们将逐一介绍它们的特点和优势。 …

    2025年12月7日 好文分享
    000

发表回复

登录后才能评论
关注微信