编写高效服务器程序,需要考虑的因素

  • 系统的硬件资源,比如说CPU个数,速度,内存大小等
  • 一方面是指系统的软件资源,比如操作系统允许用户打开的最大文件描述符数量
  • 并发处理 进程池或线程池实现高效的并发模式(半同步、半异步、领导者、追随者模式),以及高效的逻辑处理方式--有限状态机
  • 内存的规划使用
    使用内存池,以空间换时间,被实现创建好,避免动态分配,减少服务器对内核的访问频率
  • 避免不必要的数据复制,减少将数据从内核缓冲拷贝到应用程序缓冲区中。以ftp服务器来说,并不需要知道目标文件的内容,直接使用‘零拷贝’函数sendfile。当两个工作进程之间需要传递大量数据时,应该考虑使用共享内存在他们直接共享这些数据,而不是使用管道或者消息队列来传递。
  • 上下文切换和锁
  1. 过多的进程或县城之间的切换占用了大量CPU时间,服务器真正处理业务逻辑的CPU时间比重就下降了。因此为每个客户端创建一个工作线程是不可取的。高效并发模式
  2. 锁的引入不仅需要处理业务逻辑,而且需要访问内核资源,所以尽量避免使用锁。一定要使用的话,考虑粒度问题,比如读写锁,当工作线程都只读一块内存区域时,读写锁不会增加系统开销,而只有需要写是才能真正需要锁住这块内存区域。
    对于高峰和低峰的伸缩处理
    适度的缓存

你可能感兴趣的:(编写高效服务器程序,需要考虑的因素)