用户空间:user space。

内核空间:kernel space。

应用程序在访问磁盘文件时,会先利用DMA技术把文件内容读取到内核缓冲区,然后再把内容从内核缓冲区copy到用户缓冲区中。如果程序要输出,则会把用户缓冲区的内容再copy到内核的socket缓冲区中,利用DMA输出。以下是原理图:

mmap():利用DMA将文件内容拷贝到内核缓冲区,然后应用程序和操作系统共享这块区域,从而减少了内核缓冲区到用户缓冲区的这一步拷贝。以下是原理图:

sendfile():sendfile利用DMA技术将文件内容读取到内核缓冲区,然后将带有文件位置和长度信息的缓冲区描述符添加到socekt缓冲区去,此过程不需要将数据从操作系统内核缓存区拷贝到socket缓存区。sendfile只适用于文件到socket的传输。以下是原理图:

splice():splice在两个文件描述符之间移动数据,不需要数据在内核空间和用户空间来回拷贝。splice利用了linux的管道缓冲区机制,所以至少一个描述符要为管道。splice不限于sendfile的功能,允许任意两个文件之间相互连接。

最新文章

  1. 【MongoDB】C#中的Mongo数据类型转换
  2. InnoDB配置文件复习
  3. 【PKUSC 2015的一道数学题】
  4. DevStack安装时报“download of get-pip.py failed”
  5. sh脚本学习之: sh脚本 、sed、awk
  6. NOIP201401珠心算测验
  7. js高级程序设计(四)变量、作用域和内存问题
  8. Java Concurrency - Lock
  9. Centos下安装FTP并进行虚拟用户访问方式配置
  10. sphinx插入代码
  11. Java反射 - 2(对象复制,父类域,内省)
  12. (转)iOS7界面设计规范(4) - UI基础 - 布局
  13. Tensorflow学习笔记(对MNIST经典例程的)的代码注释与理解
  14. 林业资源遥感航拍监测GIS系统
  15. Ubuntu 16.04 安装opencv3.4.5/cuda/caffe并使用jni笔记
  16. kafka AdminClient 闲时关闭连接
  17. 039 hive中关于数据库与表等的基本操作
  18. 仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
  19. PageAdmin CMS网站制作教程实例:如何制作一个报名表?
  20. c#基础学习(0724)之可变参数、ref和out

热门文章

  1. java的get请求
  2. 原型模式与serializable
  3. mysql字段名与关键字冲突(near "to":syntax error)
  4. 【谁知道C#字段为什么用属性封装?】
  5. BZOJ 1974 [Sdoi2010] auction 代码拍卖会(数位dp)
  6. P3321 [SDOI2015]序列统计 FFT+快速幂+原根
  7. Buy or Build UVA - 1151 Kruskal+枚举
  8. kuangbin专题十六 KMP&&扩展KMP HDU1686 Oulipo
  9. 禁止百度转码和百度快照缓存的META声明
  10. json几种读取方式,ArrayList循环读取【转】