![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络
qq_22796957
这个作者很懒,什么都没留下…
展开
-
零复制(zero copy)技术
1.1 背景说明:网络数据传输的全过程 在每一次网络io过程,数据都要经过几个缓存,再发送出去。如下图: 以右侧为浏览器,左侧为httpd服务器为例。 当httpd服务收到浏览器发送的index.html文件的请求时,负责处理请求的httpd子进程/线程总是会先发起系统调用,让内核将index.html从存储设备中加载出来。但是加载到的位置是内核空间的缓冲区kernel buffer,而不是直接给进程/线程的内存区。由于是内存设备和存储设备之间的数据传输,没有CPU的参与,所以这次是DMA操作。转载 2020-06-30 15:02:08 · 411 阅读 · 0 评论 -
不可不知的socket和TCP连接过程
背景 1.TCP协议栈维护着两个socket缓冲区:send buffer和recv buffer。 要通过TCP连接发送出去的数据都先拷贝到send buffer,可能是从用户空间进程的app buffer拷入的,也可能是从内核的kernel buffer拷入的,拷入的过程是通过send()函数完成的,由于也可以使用write()函数写入数据,所以也把这个过程称为写数据,相应的send buffer也就有了别称write buffer。不过send()函数比write()函数更有效率。 最终数据是通转载 2020-06-30 14:22:55 · 288 阅读 · 0 评论 -
五种IO模型透彻分析
1. 基础 在引入IO模型前,必须得对某一段数据的整个”经历”做一番解释。如图: 当某个程序或已存在的进程/线程(后文将不加区分的只认为是进程)需要某段数据时,它只能在用户空间中属于它自己的内存中访问、修改,这段内存暂且称之为app buffer。假设需要的数据在磁盘上,那么进程首先得发起相关系统调用,通知内核去加载磁盘上的文件。但正常情况下,数据只能加载到内核的缓冲区,暂且称之为kernel buffer。数据加载到kernel buffer之后,还需将数据复制到app buffer。到了这.转载 2020-06-30 13:20:39 · 171 阅读 · 0 评论