在Python 3.5中通过零用户空间内存的套接字进行文件传输

有少数的一些设计选择将Apache Kafka置于快速信息传递系统的前沿。其中之一便是zero copy机制。关于Kafka的原始叙述如下:

一个将本地文件传递到远程套接字的典型方法包括以下步骤:(1)将数据从存储介质中读取到OS的页面缓存中,(2)将缓存数据复制到应用程序缓冲区,(3)复制应用程序缓存区到另一个内核缓冲区(4)将内核缓存区发送到socket。这个过程包括4次复制和2次系统调用。在Linux和Unix的操作系统下,有一个sendfile API可以直接将将文件通道中的字节传输到套接字通道。这可以减少在(2)和(3)之间的两次复制和1次系统调用。

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

让我们一起来看看zero copy有多快。4GB.bin文件是使用以下bash命令监听生成的:

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

英文原文:http://michaldul.com/python/sendfile/

译者:廑

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180326A08HGT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券