python怎么copy_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改进它。

feb1a2354bca

image.png

feb1a2354bca

image.png

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

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

feb1a2354bca

image.png

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

feb1a2354bca

image.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值