如何编写高性能的服务器程序

编程技术  /  houtizong 发布于 3年前   161

 

 

 

在《High Performence Server Architecture》(http://pl.atyp.us/content/tech/servers.html)中,作者提出了自己的观点关于如何编写高性能的服务器程序。作者感兴趣的地方不在于使用多线程之类的并行技术,作者认为处理请求的基础设施决定了程序的性能。作者也坦言,他提出的观点和方法并不是提高服务器性能的唯一途径。作者总结了四大性能杀手:

 

  • 数据拷贝
  • 上下文环境切换
  • 内存分配
  • 锁竞争

如果处理请求的操作不会涉及数据拷贝,不会做上下文切换,不会涉及大量的内存分配,并且没有锁争用,那么,服务器的性能会相当可观。

 

数据拷贝

 

减少数据拷贝是一个共识,基本上每一个从业人员在职业生涯早期都被告诫避免数据拷贝。在大学里,教授也一再教导要遵守这条箴言,很显然,避免数据拷贝是个流行语。但是,问题是有些时候数据拷贝不会被察觉。对于你使用的底层驱动或是第三方包是否有大量的数据拷贝,你不得而知。一个例子是hash算法,hash算法会涉及到全量的数据拷贝,并且需要大量的计算。

 

一个能避免内存拷贝的切实可行的方法是使用间接传值和buffer描述符,切记不要传递buffer的指针。buffer描述符需要包含下面一些属性:

  • 整个buffer的指针和buffer的长度
  • buffer已填充部分的指针和长度,或者是偏移量和长度
  • 指向链表前后buffer描述符的指针
  • 引用计数

这样一来,不需要主动地拷贝数据使之在内存中一直存在,只需要简单地增加buffer描述符的引用。但是,作者的观点是,不要过度要求避免数据拷贝。作者见过很多为了避免数据拷贝所采取的方法反而让情况更糟糕,例如强制上下文环境切换或者是将大的I/O请求打散。数据拷贝确实很昂贵,当你需要查找系统中那些冗余的操作时,数据拷贝是需要优先被检查的。但是,也要评估你的所做所为带来的回报。

 

上下文切换

 

避免数据拷贝的经验广为所知,但是,上下文切换对程序性能的影响却不被关注。

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客