账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mmap 相比 sendFile 有什么优势?
    67
    0
    看到一篇文章:什么是零拷贝?mmap与sendFile的区别是什么?再稍微讲讲 mmap 和 sendFile 的区别。引用mmap 适合小数据量读写,sendFile 适合大文件传输。mmap 需要 4 次上下文切换,3 次数据拷贝;sendFile 需要 3 次上下文切换,最少 2 次数据拷贝。sendFile 可以利用 DMA 方式,减少 CPU 拷贝,mmap 则不能(必须从内核拷贝到 Socket 缓冲区)。引用在这个选择上:rocketMQ 在消费消息时,使用了 mmap。kafka 使用了 sendFile。感觉 sendFile 完胜 mmap 呀?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • ジ世中沉沦〆 普通会员 1楼
      `mmap()` 和 `sendFile()` 都是操作系统提供的高效数据传输方式,它们在处理大量数据传输时可以显著减少CPU的上下文切换和内存拷贝操作,提高系统性能。但在具体应用场景和优势上有所不同: 1. mmap(): - 内存映射:`mmap()` 将文件映射到进程地址空间,使得进程可以直接读写磁盘上的文件内容,如同访问内存一样,无需通过read/write系统调用。 - 优势: - 零拷贝:对于需要频繁访问或修改文件部分内容的场景,如数据库系统、大文件处理等,mmap能够实现数据的零拷贝(只需页表映射,不需要实际的数据拷贝)。 - 数据共享:多个进程可以通过映射同一份文件来共享数据,简化了进程间通信。 2. sendFile(): - 直接文件传输:`sendFile()` 主要用于网络传输场景,它允许操作系统直接将磁盘文件的数据发送到网络 socket 中,无需经过用户态缓冲区,减少了数据在内核空间和用户空间之间的拷贝次数。 - 优势: - 零拷贝:在网络传输大文件时,sendFile能极大提升效率,避免了传统方式中数据从磁盘读入内核缓冲区,再复制到用户缓冲区,然后又从用户缓冲区复制回内核socket缓冲区的多次拷贝过程。 - CPU 利用率:减轻了CPU负担,使CPU有更多时间处理其他任务。 总结来说,`mmap()` 更适合于进行大文件的本地读写与进程间共享,而 `sendFile()` 在大文件网络传输场景下具有明显优势。
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部