后端基础

《架构师训练营》之性能 & 操作系统

2020-07-22  本文已影响0人  anOnion

极客时间《架构师训练营》第七周学习笔记

性能

性能指标

首先来介绍几个常见的性能指标:

性能测试

性能测试是一个总称,具体可以细分为性能测试、负载测试、压力测试、稳定测试等等。下图是一张经典的负载-性能关系图。通常,性能测试包含三个阶段:轻负载阶段、重负载阶段、压垮阶段。这块我在作业第一题里已经有所描述了,这里不再展开了。

负载-性能关系图

性能测试是通过自动化的测试工具,模拟多种正常、峰值以及异常负载条件下,对系统的各项运行指标进行衡量的手段。通过性能测试,我们可以大致确定在各种负载下系统的运行状况。一般而言,只有在系统基础功能测试验证完成、系统趋于稳定的情况下才会进行性能测试,否则性能测试是无意义的。

性能优化

性能测试结束后,便显示出相应的系统瓶颈,我们就可以着手性能优化了。

线程相关

知识点

线程安全

当多个线程共享同一个全局变量或静态变量时,写操作有可能会发生数据冲突的问题,也就是线程安全问题。但是做读操作是不会发生线程安全问题。解决写冲突的方法就是“锁”:给代码加锁,让临界区的资源只被一个线程执行;代码执行完成后释放锁,其他线程再执行,这样就可以解决线程不安全问题。

但是锁会引起线程阻塞。阻塞导致线程既不能执行也不能释放,进而耗尽资源,最终造成系统奔溃。解决方案如下:

CAS 原语

CAS(V,E,N):V 表示更新变量;E 表示预期值;N 表示新值。当且仅当预期值 E 和内存变量 V 相同时,才将变量 V 修改为 N,否则什么都不做。在 Java 中,CAS 通过调用 JNI 的代码实现的——sun.misc.unsafe.compareandswapint;该方法为 JAVA 提供 C/C++ 方法来执行 CPU 的 CAS 指令,完成该任务。

各种锁

系统设计上有各种各样的锁:偏向锁、轻量级锁、重量级锁、总线锁、缓存锁、公平锁、非公平锁、可重入锁、独享锁、共享锁、读写锁、分段锁、自旋锁、乐观锁、悲观锁等等。

锁在各种范畴下有太多种类了,篇幅有限就不一一介绍了。我当面试官时问过别人乐观锁和悲观锁,这里就稍微展开一下:

系统设计时:若读得多,冲突几率小,用乐观锁;若写得多,冲突几率大,用悲观锁。

文件系统

结束语

这周的知识点太多了,后半部分写不过来了。操作系统快还给大学老师了。不过,复习了一下还是蛮有收获的,学生时代对上述知识点都是死记硬背的(虽然当年考试还是拿了很高分的😅);工作后相关专业名词也有接触,但是用得很少。这次老师把知识点串起来讲了一下,总算让我有点打通筋脉的感觉了。性能调优这块,太倚重经验了,虽然从网上参考了一些调优手段,但是让我自己来还是很难做到的;唉,路漫漫其修远兮呀。

上一篇下一篇

猜你喜欢

热点阅读