如何提高并发量

关于并发一直是一个面试常见的问题,在这里我基于我的理解,以及参考的网站上的资料做一个总结。个人认为,并发无非就是提高一个服务器的多处理能力,最终目的是将其效率发挥到极致。从哲学上说,消除瓶颈是提高服务器性能和并发能力的唯一途径。那消除瓶颈是什么,如何消除,这个还必须要抛开哲学层面来讲。也就是落地的问题了,我认为主要从以下三个方面来考虑:

1. 物理层,物理层问题可以理解为根本的局限性问题,如果物理层有瓶颈,那是很难提升的。

可能是服务器网络带宽不够       - 增加网络带宽,DNS域名解析分发多台服务器

2. Framework层,可以理解为系统操作层。

  1. 多线程多核编程,消除cpu瓶颈。
  2. 采用epoll,利用状态监测和通知方式,消除网络I/O阻塞瓶颈。
  3. 采用事件驱动或异步消息机制,可以消除不必要的等待操作。
  4. 如果是Linux,可以采用AIO来消除磁盘I/O阻塞瓶颈。
  5. 在事件驱动框架或异步消息中统一处理timer事件,变同步为异步,而且可以在一个线程处理无数timer事件。
  6. 部分采用共享内存的方式来做IPC通信,可以大大提高性能。

 

3. 业务处理层。

  1. 优化数据库查询较慢,导致服务器处理较慢,并发数上不去,这时就要优化数据库性能。
  2. 采用缓存redis或者memcached

 

 

一句话,在带宽一定的情况下:采用多任务(多线程多核编程),使用事件驱动或异步消息机制,尽量减少阻塞和等待操作(如I/O阻塞、同步等待或计时/超时,数据库分库/分表,设置缓存等)。

首先提高带宽这就跳过不说了,从开发的角度来讲,我们更关注后边两个。系统操作层和业务处理层。

Linux下突破限制实现高并发量服务器

系统操作层

  1. 修改用户进程可打开文件数限制

Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发tcp/udp连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开的文件数量的限制(每个每个tcp/udp连接都是一个sock句柄,每个sock句柄也是一个文件句柄)。

可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:
[linuxidc@www.linuxidc.com ~]$ ulimit -n

1024
这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听socket,进程间通讯的unixsocket文件,剩余的可用大约有1024-10=1014左右,也就是说缺省下,linux通讯程序最多可打开1014TCP并发连接。对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值