如何编写高性能的服务器程序
编程技术  /  houtizong 发布于 3年前   161
在《High Performence Server Architecture》(http://pl.atyp.us/content/tech/servers.html)中,作者提出了自己的观点关于如何编写高性能的服务器程序。作者感兴趣的地方不在于使用多线程之类的并行技术,作者认为处理请求的基础设施决定了程序的性能。作者也坦言,他提出的观点和方法并不是提高服务器性能的唯一途径。作者总结了四大性能杀手:
如果处理请求的操作不会涉及数据拷贝,不会做上下文切换,不会涉及大量的内存分配,并且没有锁争用,那么,服务器的性能会相当可观。
数据拷贝
减少数据拷贝是一个共识,基本上每一个从业人员在职业生涯早期都被告诫避免数据拷贝。在大学里,教授也一再教导要遵守这条箴言,很显然,避免数据拷贝是个流行语。但是,问题是有些时候数据拷贝不会被察觉。对于你使用的底层驱动或是第三方包是否有大量的数据拷贝,你不得而知。一个例子是hash算法,hash算法会涉及到全量的数据拷贝,并且需要大量的计算。
一个能避免内存拷贝的切实可行的方法是使用间接传值和buffer描述符,切记不要传递buffer的指针。buffer描述符需要包含下面一些属性:
这样一来,不需要主动地拷贝数据使之在内存中一直存在,只需要简单地增加buffer描述符的引用。但是,作者的观点是,不要过度要求避免数据拷贝。作者见过很多为了避免数据拷贝所采取的方法反而让情况更糟糕,例如强制上下文环境切换或者是将大的I/O请求打散。数据拷贝确实很昂贵,当你需要查找系统中那些冗余的操作时,数据拷贝是需要优先被检查的。但是,也要评估你的所做所为带来的回报。
上下文切换
避免数据拷贝的经验广为所知,但是,上下文切换对程序性能的影响却不被关注。
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接