前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >"零拷贝"是如何提高Web服务器性能的

"零拷贝"是如何提高Web服务器性能的

作者头像
dys
发布2018-04-02 17:27:50
1.1K0
发布2018-04-02 17:27:50
举报
文章被收录于专栏:性能与架构性能与架构

在Linux kernel2.2 版本之后出现了一种叫做 "零拷贝(zero-copy)" 系统调用机制,目前很多应用服务器如 apache、nginx都支持,此机制很好的提高了服务器的性能

"零拷贝"是由 sendfile 系统调用实现的

"零拷贝"出现之前,读写数据基本都是使用 read系统调用 和 write系调用

以web服务来说,一个请求建立,从磁盘文件到网络连接之间,会通过 硬件 -> 内核层 -> 用户层 多次读写系统来完成文件数据的复制传输

从内核层用 read系统调用 读到用户层,再从用户层用 write系统调用 写到内核层,每一次用户层到内核层都进行一次上下文转换,这种代价是非常昂贵的,如果web服务器接受大量并发请求,这种系统调用就会非常频繁,服务器的性能就会下降

而"零拷贝" 跳过“用户缓冲区”的拷贝,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”

Web服务器在支持了sendfile系统调用后,避免了内核层与用户层的上线文切换(content swith)工作,大大减少了系统性能的开销,这种方式,不仅节省了内存,而且还有CPU的开销

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档