`
bofang
  • 浏览: 126638 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

 

 

 

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

 

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

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

 

数据拷贝

 

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

 

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

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

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

 

上下文切换

 

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

分享到:
评论

相关推荐

    Linux高性能服务器编程.pdf

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    Linux高性能服务器编程高清PDF(带书签)+源码

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    Linux高性能服务器编程PDF带目录高清版

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    Linux高性能服务器编程

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    linux高性能服务器编程

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    Linux 高性能服务器编程

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    游双-Linux高性能服务器编程(高清pdf+源码)

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

Global site tag (gtag.js) - Google Analytics