稳定高并发高性能程序设计原则简单总结

原创 2018年03月23日 00:32:26

稳定性

稳定性是第一前提,如系统崩溃恢复容灾备份这些,主要是一些数据保护的机制,还有就是程序参数的校验、异常的处理、事务的回滚、程序边界的设计(合理的边界划分可以避免服务的连锁崩溃)、对账机制等,这些都是日常生活中常用的一些手段在计算机领域的体现,更详细的设计就不深入的分析了。

高并发

通过多年来对操作系统的研究,以及结合多年来各种语言的编程经验来说,高性能的程序的开发其实都是有规可循的。因为高性能的程序基本上都会面临相似的问题:如何提高并发,如何降低时间复杂度(但是并不是一味的降低,需要在空间复杂度之间做一个平衡)。

如何提高并发:在目前的大多数程序中或多或少的都会遇到并发的问题,如何设计高效的并发非常的重要,从我个人的经验来说,当遇到一个会存在并发的业务场景,我会首先整理业务场景,并根据业务场景画出简单的数据流图,根据数据流图找出相应的会并发访问修改的数据,缩小加锁的粒度(只对需要并发访问的数据进行加锁),。

然后分析数据的性质是否可以局部的并发,这种情况下就可以使用分段锁(再次减小加锁的粒度,一个比较出名的例子就是mysql的表锁、行锁机制)。

最后再分析数据的访问性质,是读多写少(大部分都是这种情况)、读少写多(日志)、还是读写频率差不多,不同的业务情况使用不同的锁,比如针对读多写少的业务来说,为了提高读的并发性可以使用读写锁;针对并发粒度较小,且并发操作的耗时很短的情况,操作系统又提出了CAS操作(乐观锁),这种操作避免了上锁和释放锁耗时的过程,进一步提高了并发性,但是只是针对特定的场景才能达到想要的性能。

当单台并发达到上限之后,就是分布式系统粉墨登场了,虽然分布式系统数据一致性会有一定的耗时,但是分布式系统的并发却有了显著的提高,一致性所带来的耗时/并发数带来的平均延迟并不大,所以能很好的满足系统的需求。

高性能

高性能的设计主要分为两个层面,一个层面是操作系统层面的,另外一个层面是业务层。

操作系统层面:尽量使用操作系统和处理器自身的高性能的指令或者是运算方式,最简单的例子是位运算,针对一些特殊的算法如果能使用位运算实现,那么尽量使用位运算实现(这在很多算法面试题中都会考的,因为位运算在很多场景都有特别切合实际的使用),还有就是合理高效的使用操作系统自身的API,如DMA之类的机制,以及有效的利用缓存之类的机制。

业务层面来说:首先需要为数据的存储设计合适的数据结构,这个也需要在空间利用率和访问复杂度之间做权衡;然后为业务中需要计算的场景设计高效的算法,算法的抽象是一个比较难的事情,算法设计需要在时间复杂度和空间复杂度中做权衡,还有就是针对算法的特性进行优化,可以参考算法设计,如果算法具有分治、动态规划这些算法的特性,那么此类算法可以采用并发机制提高算法的性能(算法设计很复杂,算法本身涉及到的很多高等数学的知识,还有就是算法的实现是否更加符合计算机的运行机制,建议多看看ACM算法设计相关书籍)

高性能Mysql运维应用实战

爱维Linux独家出品,本课程从mysql运维的方方面面进行介绍,主要对mysql版本的选择,mysql平台的部署,优化、调优、mysql主从复制,双主互备的mysql集群,MHA的Mysql架构和部署等所有跟mysql运维相关的内容进行详细而深入的介绍,属于实战经验分享,高薪运维必备。
  • 2016年07月08日 14:44

Android如何高性能编程

如何实现Android的高性能编程,就涉及到Android的内存优化,算法优化,Android的界面优化,Android指令级优化,以及Android应用内存占用分析,还有其他的知识。 作为开发人员,...
  • csuhanshuai
  • csuhanshuai
  • 2016-03-21 15:13:45
  • 790

高性能程序设计(性能优化参考点)

一、何谓高性能?   对于给定的计算任务,程序完成它所需消耗的CPU时钟周期数越少,性能就越高;反之,性能就越低。   二、如何写出高性能的程序?   1. 尽量减少完成任务所需执行的指令...
  • crazycoder8848
  • crazycoder8848
  • 2010-03-11 22:52:00
  • 1057

高并发文件读写

未来黑科技 2017-12-24 15:53:11 目前着手的项目,是关于一个用文件做缓存的。具体过程是页面的每个请求都会触发一个线程来读取资源文件,当文件系统里不存在该文件时,则会从数据库中读取...
  • u011277123
  • u011277123
  • 2017-12-25 09:31:04
  • 460

C语言并发编程

  • 2012年03月29日 13:52
  • 1.75MB
  • 下载

C++高并发

1. 要解决的问题参看http://blog.csdn.net/cadem/article/details/483757352. 线程间同步http://concurrencykit.or...
  • cadem
  • cadem
  • 2015-09-22 13:24:47
  • 2309

libPhenom:Facebook开源的高性能C语言并发编程框架

简介 libPhenom是Facebook发布的一个C语言事件框架,用于构建高性能和高可扩展的系统。支持多线程、提供内存管理和常用数据结构、json处理。 特性 带有计数器的内存管理...
  • xyblog
  • xyblog
  • 2016-10-08 18:28:02
  • 1048

关于java实现fastDFS的上传和下载

主要关键性代码,完全把这个地址: http://love398146779.iteye.com/blog/2123802的全部代码copy下来即可。 我只补充两点他没有的。 ①用到的关键性f...
  • jianbo2233
  • jianbo2233
  • 2018-01-12 16:58:12
  • 112

fastdfs java客户端案例(集成线程池)

  • 2017年08月25日 16:36
  • 352KB
  • 下载

FastDFS性能测试

FastDFS简介 fastdfs是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,fastfd非常适用于基于文件服务的站点,例如图片分享...
  • xiaofei0859
  • xiaofei0859
  • 2016-10-14 16:13:02
  • 2038
收藏助手
不良信息举报
您举报文章:稳定高并发高性能程序设计原则简单总结
举报原因:
原因补充:

(最多只允许输入30个字)