Linux Sendfile的优势
Sendfile函数在两个文件描写叙述符之间直接传递数据(全然在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率非常高,被称之为零拷贝。
Sendfile函数的定义例如以下:
#include <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
1.传统方式read/write send/recv
在传统的文件传输里面(read/write方式),在实现上事实上是比较复杂的,需要经过多次上下文的切换。我们看一下例如以下两行代码:
1.read(file, tmp_buf, len);
2.write(socket, tmp_buf, len);
以上两行代码是传统的read/write方式进行文件到socket的传输。
当需要对一个文件进行传输的时候,其详细流程细节例如以下:
1.调用read函数,文件数据被copy到内核缓冲区
2.read函数返回。文件数据从内核缓冲区copy到用户缓冲区
3.write函数调用。将文件数据从用户缓冲区copy到内核与socket相关的缓冲区。
4.数据从socket缓冲区copy到相关协议引擎。
以上细节是传统read/write方式进行网络文件传输的方式,我们能够看到,在这个过程其中,文件数据实际上是经过了四次copy操作:
硬盘-->内核buf-->用户buf-->socket相关缓冲区(内核)-->协议引擎
2.新方式sendfile
而sendfile系统调用则提供了一种降低以上多次copy。提升文件传输性能的方法。
Sendfile系统调用是在2.1版本号内核时引进的:
sendfile(socket,file,len);
执行流程如下:
1.sendfile系统调用,文件数据被copy至内核缓冲区
2.再从内核缓冲区copy至内核中socket相关的缓冲区
3.最后在socket相关的缓冲区copy到协议引擎
相较传统read/write方式,2.1.版本号内核引进的sendfile已经降低了内核缓冲区到user缓冲区。再由user缓冲区到socket相关缓冲区的文件copy,而在内核版本号2.4之后,文件描述符结果被改变,sendfile实现了更简单的方式,系统调用方式仍然一样,细节与2.1版本号的不同之处在于,当文件数据被拷贝到内核数据缓冲区时,不再将全部数据copy到socket相关的缓冲区,而是只将记录数据位置和长度相关的数据保存到socket相关的缓存,而实际数据将由DMA模块直接发送到协议引擎,再次降低了一次copy操作。
Linux Sendfile的优势相关推荐
- Linux的强大优势(转)
Linux的强大优势(转)[@more@]您或许已听到大量称赞Linux如何如何强壮的言论,现今就让我们来仔细逐条地对他们进行阐述,在众人赞誉声中获得事实真相. 低廉的附加费用 ----Linux经常 ...
- win08跟linux,Win 8 PK Linux!八大优势助微软完胜
作为传统桌面OS的霸主,Windows操作系统长期统治着桌面操作系统.即使是不可一世的苹果,在桌面OS上,也难以跟Windows的影响力对比.而在开源市场,却有着不可忽视的一股新生力量,Linux桌面 ...
- linux数字标牌,数字标牌操作系统中,Android、 Windows、Linux各自的优势在哪?
Android.Windows.Linux数字标牌操作系统到底三者有何优势,相信很多朋友都在思考这个问题,今天智能数字标牌网小编和大家一起探讨.首先Android.Windows.... Androi ...
- 浅谈学习掌握linux系统的优势
导读 Linux系统让我们懂得了共享.开放.自由可以让人类生活的更加美好,开源精神是一种让每个从事Linux行业的技术人员从骨子里自豪的情怀,开源产品的兴盛受益于开源社区的强壮根基.Linux真的给了 ...
- Liunx之网络编程
Liunx网络编程 进程 线程 TCP/IP协议簇 并发编程 操作系统 进程 进程:资源分配的最小单元,操作系统执行的最小单位: Linux对进程采用了一种层次系统,每个进程都依赖于一个父进程.内核启 ...
- 凡人学习Linux之路
近期Windows 11的信息频频出现在各个公众平台上,对它的评价好坏参半,我的关注点是它取消了任务栏移动功能,只能靠着屏幕底边,不能移动到顶部或左右两侧,而且有人喊话说准备撤了,换Linux.其实现 ...
- Linux的命令行界面简介
学习目标:能够知道什么是命令行,能够说出命令提示符的组成,能够说出如何获取到相关命令的帮助 一.命令行的介绍 命令行界面(英语:command-line interface,缩写:CLI)是在图形用户 ...
- 为什么建议大家使用Linux开发?
原文链接 : cnblogs.com/summertime-wu/p/11140052.html Linux 能用吗? 我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上.当我告诉 ...
- 嵌入式Linux的特点
Linux系统是完全开放.免费的. Linux操作系统的显著优势是多用户和多任务. 设备是独立的.
最新文章
- python制作贪吃蛇游戏_用Python写贪吃蛇游戏的代码实例
- 为什么多个线程不可能同时抢到一把锁_并发基础理论:原子性问题、锁、管程...
- 【LeetCode笔记 - 每日一题】373. 查找和最小的 K 对数字(Java、堆、优先队列)
- 云小课 |选定合适的证书,做“有证”的合规域名
- python网络编程-socketserver模块
- 1.4 案例:广告预测、房价预测
- CuteFTP下载包含中文的文件,无法下载的问题
- Unity太空大战游戏-Socket网络通信教学示例
- 【存储数据恢复】esx vmfs的互斥导致存储数据丢失的数据恢复案例
- SVN :找不到这样的主机
- 【开源方案】PPT/PPTX转image图片
- 冒泡排序和快速排序的效率比较
- python双样本t检验_两样本t检验的scipy实现
- iPhone在线音乐盒,代码开源
- PR AE PS安装资源包
- 全球及中国组织工程医疗产品行业深度分析及十四五前景预测报告2022年版
- How to evaluate and motivate a speech
- 《你是我的荣耀》制片人张萌犯受贿罪:被判处有期徒刑三年
- 计算机组成原理笔记(7)---定、浮点运算、算术逻辑单元
- 在接下来的几周,Mt.gox可能会上演一出好戏
热门文章
- java中三种常见内存溢出错误的处理方法
- activemq的部署(三)
- 大量更新后数据膨胀_段合并的原理探寻
- 使用最新版mysql 8.0.11会出现的一些问题
- 原理详解与标准解法——蓝桥杯_2016年省赛B组 第七题 剪邮票(暴力+迷宫变形)
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
- android平台 arcgisr_第一个基于ArcGIS的Android应用
- 智能情绪分析技术_情绪转变令市场再次修正 Justforex:欧元、英镑、日元、黄金技术分析...
- Shell编程之条件语句(if语句,case分支语句)
- mysql榨包是什么意思_模块与包 Mysql与Oracle区别