Python 3.5+ 如何对Zero-Copy的使用

zero copy: 零拷贝。提高性能。
一个将本地文件传递到远程套接字的典型方法包括以下步骤:

      (1)将数据从存储介质中读取到OS的页面缓存中
      (2)将缓存数据复制到应用程序缓冲区
      (3)复制应用程序缓存区到另一个内核缓冲区
      (4)将内核缓存区发送到socket。

这个过程包括4次复制和2次系统调用。在Linux和Unix的操作系统下,有一个sendfile API可以直接将将文件通道中的字节传输到套接字通道,这可以减少在(2)和(3)之间的两次复制和1次系统调用。

自从python 3.3sendfile系统调用可用作os.sendfile,python 3.5 为基于socket的应用带来了更高级的封装包socket.socket.sendfile。让我们一起来创建一个客户端—服务器文件传输的例子,稍后用sendfile改进它。


image.png
image.png

客户端不会故意溢出到磁盘上 - 我们想要对其进行基准测试,写入操作将是最费时的。

引入socket.socket.sendfile后可将服务器代码简化为:

image.png

我已经对这两台服务器运行了100次客户端脚本。 执行时间的分配如下所示。

image.png

在执行时间方面,socket.socket.sendfile方法速度提高了一倍以上,并且稳定得多。 时间的标准差分别为0.68s和0.03s。

转自:
https://www.jianshu.com/p/50b58f7a4844
`

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,413评论 4 16
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,879评论 1 118
  • 有一个人说 你拍的视频总是很有意思 或许你可以去拍拍视频 于是我进了电视台的一档节目 那个人又说 你写的文章总是很...
    小蜗牛的姐姐阅读 253评论 0 0
  • 【作者】李佳璋 【导师】刘艳 袁浩 郑鹏 【导图解说】这幅导图是在根据发英语发音来整理总结出的笔记,下面我将从心、...
    导图学者阅读 812评论 0 0
  • 首章 梦 如此让人怀念的声音和气息与这惹人爱的阳光和温度。 我最珍贵的谁与我完美的贴合到了一起。难以区分的连结到了...
    Tora_虎阅读 6,901评论 0 3

友情链接更多精彩内容