架构师训练营 week07 学习总结
性能测试指标:响应时间、并发数、吞吐量、性能技术器
性能测试方法:性能测试、负载测试、压力测试、稳定性测试
性能优化的一般方法:先根据性能测试获得性能指标,然后分析性能指标,发现性能与资源瓶颈点。再进行架构与代码分析,寻找性能与资源瓶颈点所在,进而进行架构与代码优化。最后再次进行性能测试,验证性能是否得到优化。
系统性能优化的分层思想:机房与骨干网络、服务器与硬件、操作系统、虚拟机、基础组件、软件架构、软件代码
软件架构优化:缓存、异步、集群
软件代码性能优化:
1、并发编程,多线程与锁
2、资源复用,线程池与对象池
3、异步编程,生产者与消费者
4、数据结构,数组、链表、hash 表、树
进程、线程,多个线程共享进程的内存地址空间
线程栈:线程永远都是执行位于栈顶的函数
线程函数栈:存储局部变量
Java web 应用多线程运行时视图:物理服务器->操作系统->JVM 进程->Tomcat 容器->应用程序,每个用户请求分配一个线程
线程安全:多个线程同时修改堆里的数据的时候,就会产生线程安全问题
临界区:多个线程访问共享资源的一段代码被称为临界区
锁会导致线程阻塞,阻塞导致线程既不能继续执行,也不能释放资源,高并发系统中可能导致资源耗尽,进而导致系统崩溃
避免阻塞引起崩溃的手段:限流、降级、异步 IO
锁原语 CAS(V,E,N),V 表示要更新的变量、E 表示预期值、N 表示新值
系统原语,如果 V 值等于 E 值,则将 V 的值设为 N;若 V 值和 E 值不同,什么都不做
Java 通过 CAS 原语在对象头中修改 Mark Word 实现加锁
偏向锁、轻量级锁、重量锁,竞争加强,性能降低
多 CPU 情况下的锁:每个 CPU 有自己的缓存,通过缓存读取主存中的数据;通过缓存一致性协议或者总线锁机制保证一致性
总线锁:使用处理器的 LOCK#信号,当一个处理器在内存总线上输出此信号的时候,其他处理器的请求将被阻塞,该处理器独占内存
缓存锁:通过锁定缓存行的方式,来保证一致性,性能较好
公平锁、非公平锁
可重入锁
独享锁、互斥锁、共享锁、读写锁
乐观锁、悲观锁
分段锁
自旋锁
版权声明: 本文为 InfoQ 作者【GunShotPanda】的原创文章。
原文链接:【http://xie.infoq.cn/article/a9005d66fff577be280f24bcb】。未经作者许可,禁止转载。
评论