【数媒在线课堂】内存映射:在线课堂

epoll 只告知就绪的文件描述符,而且当调用 epoll_wait () 获得文件描述符时,返回并不是实际的描述符,而是一个代表就绪描述符数量的值,然后只需去 epoll 指定的一个数组中依次取得相应数量的文件描述符即可在线课堂

这里使用了内存映射 (mmap) 技术,这样彻底省掉了这些文件描述符在系统调用时复制的开销在线课堂

epoll 采用基于事件的就绪通知方式在线课堂。其事先通过 epoll_ctrl () 注册每一个文件描述符,一旦某个文件描述符就绪时,内核会采用类似 callback 的回调机制,当进程调用 epoll_wait () 时得到通知

Sendfile

大多数时候,我们都向服务器请求静态文件,比如图片,样式表等在线课堂

在处理这些请求时,磁盘文件的数据先经过内核缓冲区,然后到用户内存空间,不需经过任何处理,其又被送到网卡对应的内核缓冲区,接着再被送入网卡进行发送在线课堂

Linux 提供 sendfile () 系统调用,可以讲磁盘文件的特定部分直接传送到代表客户端的 socket 描述符,加快了静态文件的请求速度,同时减少 CPU 和内存的开销在线课堂

适用场景: 对于请求较小的静态文件,sendfile 发挥的作用不那么明显,因发送数据的环节在整个过程中所占时间的比例相比于大文件请求时小很多在线课堂

内存映射

Linux 内核提供一种访问磁盘文件的特殊方式,它可以将内存中某块地址空间和我们指定的磁盘文件相关联,从而对这块内存的访问转换为对磁盘文件的访问在线课堂。 这种技术称为内存映射。

多数情况下,内存映射可以提高磁盘 I/O 的性能,无须使用 read () 或 write () 等系统调用来访问文件,而是通过 mmap () 系统调用来建立内存和磁盘文件的关联,然后像访问内存一样自由访问文件在线课堂

缺点 : 在处理较大文件时,内存映射会导致较大的内存开销,得不偿失在线课堂

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://gmstar.cn/post/129.html