提升服务器程序性能的一些方法

1. 锁的使用mysql

锁是影响服务器程序性能的第一大杀手。服务器程序通常都是多线程或是多线程的,锁确定避免不了。对于锁的使用,第一点就是减少锁的粒度。好比mysql有行锁,表锁,各类粒度不一样的锁。在须要加锁的地方,选择粒度最小的锁。第二点,使用一些高性能的锁,好比读写锁,自旋锁。这个要根据具体的应用场景来选择。另外还有一些应用级别的锁,好比电商系统里面,用来减库存的乐观锁,与其对应的则是悲观锁。另外,还能够经过优化代码,来达到无锁化操做。linux

2. 内存使用sql

在一个内存操做密集型的服务器程序上,对内存的使用优化确定也是必不可少的。首先,是使用内存池,来避免内存的频繁申请与释放。其次,减小没必要要的memset与memcpy。好比,咱们的流媒体服务器,发送媒体流的过程就是一个不断申请释放内存的操做。对于申请的内存,咱们就不必给它清零,由于发送的时候,都会指定发送长度。申请的内存使用了多少,就发送多少,不须要上来就清零。对于内存拷贝而言,好比咱们在写网络程序时,socket收到的数据包会读到一块缓存里面,那么在解析的时候,尽可能不要再将数据拷贝到另外一块内存上解析。咱们还能够本身实现memcpy等函数,利用cpu的特性,每次操做4个字节或是8个字节,根据操做系统的位数决定。还有就是尽可能减小用户空间与内核空间的内存拷贝操做,好比使用一些零拷贝的函数,sendfile ,mmap等windows

3. 多线程缓存

服务器程序,应该禁止动态建立线程。全部的线程应该在程序初始化时就建立,直至程序运行结束。固然也有一些场景,能够惰性化开启。好比在业务第一次触发时,开启相应线程,以后就不须要再关闭了。对于线程池的使用,要选择合理的线程个数。线程过小,没法发挥处理器的多核优点;线程太多,系统会消耗不少性能在线程切换上。通常来讲,线程的数量是处理器核心数量的两倍服务器

4. 网络网络

高并发离不开网络性能,I/O密集型的程序,linux上使用epoll, bsd上的kquene,windows有iocp,这些就不细讲了,以前的博文中有介绍多线程

5.异步化并发

服务器之间相互依赖的接口,尽可能实现成异步的,这样就不须要阻塞调用线程,减小由于网络缘由引发的等待异步

6.与客户端的交互

全部的服务器都给客户端提供服务,应该尽可能减小与客户端的交互过程。即作到在每次交互中,处理更多的事情。好比咱们本身实现的流媒体服务器,刚开始点播流的时候,要发一些信令报文。以前咱们须要三次交互,才能开始发流,后来经过消息合并,节省了一步。不要小看这一小步,在网络很差的状况下,可能就会减小不少点播时延

相关文章
相关标签/搜索