说明

讲师:李智慧

操作系统

架构师要头脑中要实时运行操作系统的架构,一看到指标有异常,就要知道可能哪些地方有问题。

程序运行时架构

程序是静态的。
程序运行起来以后,被称作进程。

进程是有生命的,程序代码是静态的。
程序代码运行起来后,在堆内存空间操作数据才会有数据冲突,程序调用是在栈内存空间调用指令。

操作系统多任务运行环境

计算机的 CPU 核心数是有限的。但是,服务器可以同时处理数以百计甚至数以千计的并发用户请求。

那么,计算机如何做到的?

  • 进程分时执行。

多个进程是活着的,但是不是每个进程都是同时执行的,是CPU在按照分时执行的,因为时间片比较小,所以用户感觉到都是一起执行的。就像播放视频一样,视频的原理是图片快速切换,比如1秒钟60帧,切换60张图片,感觉就是动的。

也就是多个进程存在争夺资源,比如锁,修改数据等。

进程的运行期状态

运行:当一个进程在 CPU 上运行时,则称该进程处于运行状态。处于运行状态的进程的数目小于等于 CPU 的数目。

就绪:当一个进程获得了除 CPU 以外的一切所需资源,只要得到 CPU 即可运行,则称此进程处于就绪状态,就绪状态有时候也称为等待运行状态。

阻塞:也称为等待或者睡眠状态,当一个进程正在等待某一事件发生(例如等待 I/O 完成,等待锁…)而暂时停止运行,这时即使把 CPU 分配给进程也无法运行,故称该进程处于阻塞状态。

进程 vs 线程

不同进程轮流在 CPU 上执行,每次都要进行进程间 CPU 切换,代价非常大。因此服务器应用通常是单进程多线程。

进程从操作系统获得基本的内存空间,所有的线程共享着进程的内存地址空间。而每个线程也会拥有自己私有的内存地址范围,其他线程不能访问。

线程栈

void f(){int x = g(1);x++; // g 函数返回,当前堆栈顶部为f函数栈帧,在当前栈帧继续执行f函数的代码.
}int g(int x) {return x + 1;
}

什么情况下回Stack Overflow?

  1. 栈初始化小了,函数调用过多,栈就满了。
  2. 无限递归,没有出口函数,一定会把栈打满了。

Java Web 应用多线程运行时视图

Tomcat 启动的时候做了什么? Tomcat启动JVM进程,JVM进程启动Tomcat进程,用下面的指令。

java org.apache.catalina.startup.Bootstrap "$@" start

Tomcat启动以后,还启动了一堆线程,也就是开辟一个线程池。当有一个用户请求,则分配一个线程。线程调用应用程序,比如servelet响应request,response。

线程做的事情,就是执行代码。方法执行就是栈中的指令。在不同的栈帧中,线程是互不影响的。也就是线程内的临时变量,是安全的。这也是推荐无状态编程的原因。

线程安全

在某些代码修改内存堆(进程共享内存)里的数据的时候,如果多个线程在同时执行,就可能会出现同事修改数据的情况,比如,两个线程同时对同一个堆中的数据执行 +1 操作,最终数据只会被加一次,这就是人们常说的线程安全问题,实际上线程的结构应该是依次 +1, 即最终结果应该是 +2.

临界区

多个线程访问共享资源的这段代码被称为临界区,解决线程安全问题的主要方法是使用锁,将临界区的代码加锁,只有获得锁的线程才能执行临界区代码。

lock.lock(); // 线程获得锁
i++;  // 临界区代码,i位位于堆中
lock.unlock(); // 线程释放锁

阻塞导致高并发系统崩溃

锁(IO)会引起线程阻塞。阻塞导致线程既不能继续执行,也不能释放资源。进而导致资源耗尽,最终导致系统崩溃。

瓶颈有两个:

  1. 监听接收请求的端口,攻击方如果用慢字节短字节访问,一台笔记本可以压垮几十台服务器。
  2. 数据库的慢SQL查询,导致其它操作阻塞。

避免阻塞引起的崩溃

  • 限流:控制进入计算机的请求数,进而减少创建的线程数。
  • 降级:关闭部分功能程序的执行,尽早释放线程。
  • 反应式:异步;无临界区(Actor模型)

锁原语 CAS (Compare-And-Swap)

CAS(V, E, N)

  • V 表示更新的变量
  • E 表示预期值
  • N 表示新值

如果V值等于E值,则将V的值设为N,若V值和E值不同,什么都不做。

CAS是一种系统原语,原语的执行必须是连续的,在执行过程中不允许被中断。

Java 通过 CAS原语在对象头中修改Mark Work实现加锁

Mark Word (64 bits) 锁状态
unused: 25

极客大学架构师训练营 性能优化 进程 线程 锁 存储 分布式数据库 第14课 听课总结相关推荐

  1. 可复制领导力 - 极客大学架构师训练营 架构师老A

    说明 分享人: 架构师老A 分享主题:<可复制领导力> 分享提纲: 个人能力成长阶梯 东西方领导力差异 管理者角色认知 架构师老A自我介绍 老A亲爱的老师们,同学们,大家好晚上,今晚由我给 ...

  2. 极客大学架构师训练营大作业

    大作业 背景 产品需求 技术方案建议 练习要求 用例图 泳道图 部署图 时序图 用户下单&支付 快递员位置上报 系统派单 订单状态图 背景 产品需求 技术方案建议 练习要求 用例图 说明: ● ...

  3. 极客大学产品经理训练营 产品文档和原型 作业4

    作业 [本周作业]写一个用例,挑一个:你自己的产品 / 你喜欢的产品 / [拍东西]发起拍卖/ [知识星球]加入星球/ [极客时间]购买课程: 1. 标题作者修改历史 标题:[极客时间]购买课程 作者 ...

  4. 极客大学产品经理训练营:业务流程与产品文档 第11课总结

    讲师:邱岳 1. 原型图 1.1 手绘图 + Scanner Pro 1.2 线框图 1.3 高保真产品图 1.4 做原型图的目的 坍缩:规划时梦到自己成了乔布斯,赶紧画个图让自己冷静冷静: 具体:具 ...

  5. 极客大学产品经理训练营:数据分析与商业分析,商业分析到业务分析 第18课总结

    讲师:邱岳 1. 产品经理眼中的利润.成本.收入 利润 = 收入 - 成本 奶茶利润率极高,达到60%左右.但是奶茶盈利比较难. 所有买水的产品利润率都极高,比如可口可乐,咖啡,奶茶等. 案例:有个面 ...

  6. 极客大学产品经理训练营:产品文档和原型咋弄 - 流程图 第9课总结

    讲师:邱岳 1. 图的意义 流程图.活动图.时序图.状态图,本次聚焦于过程和行为描述. 提效.宏观.点睛. 梳理思路 用例:做什么? 流程图:怎么做? 2. 流程图.活动图.时序图 3. 动手画 – ...

  7. 极客大学产品经理训练营 极客时间购买课程-大作业

    1. 标题作者修改历史 标题:[极客时间]购买课程 作者 历史 时间 易筋 创建 2021-01-09 易筋 添加购买流程图6 2021-03-02 易筋 添加购买时序图7 2021-03-16 2. ...

  8. 极客大学产品经理训练营:业务架构与概念模型 第10课总结

    讲师:邱岳 1. 什么是状态图 系统中的概念或对象随着一些事件的发生,改变了状态,通常这个状态比较多.比较复杂时,我们需要用状态图来表示他们的边界,以及触发状态转换的活动. 2. 动手画 – 员工状态 ...

  9. 极客大学产品经理训练营:运营思维 第19课总结

    讲师:邱岳 1. 运营是做什么的 运转·经营. 产品经理经常拆房子.盖新房子.经营是要持续经营一个产品. CEO.COO(Apple 的Tim Cook以前就是).CTO.CFO.CIO- 运营其实是 ...

  10. 极客大学产品经理训练营:产品经理的职业规划 第20课总结

    讲师:邱岳 1. 简历(你)作为产品 简历可能是你向你未来同事展示的第一个作品,关于你自己的经历.特点.审美,所以要像设计和研发一个产品那样设计好你的简历. 当谈论产品的时候,我们的思路应该依然是:用 ...

最新文章

  1. leetcode valid number
  2. 用mysql随机查询表a10条数据_ES简介
  3. java 获取页面元素的位置_Selenium Java 页面元素定位2
  4. 电路基础知识 -- 数模信号
  5. 《机器学习实战》总结
  6. 二 计算机技术与机械电子技术的关系,机械电子工程与人工智能的关系初探
  7. 好书推荐之《活着》 隐私策略(Privacy policy)
  8. mysql 优化命令_MySQL优化Explain命令简介(一)
  9. C程序设计语言现代方法11:指针
  10. Markdown中插入图片及图注
  11. iCollections for Mac(桌面整理工具)
  12. 读书笔记18:命令模式
  13. 人生苦短之我用Python篇(socket编程)
  14. Atitit 前端算法技术体系总结 目录 1. 3. Ui方面的算法 3 2 3.1. 软键盘算法 计算软键盘上下左右按键位置 3 2 3.2. Sprire生成随机位置算法 随机数算法 3
  15. 数学建模比赛需要那些c语言的知识,数学建模需要掌握哪些编程语言和技术
  16. 开源alisql压测批处理性能
  17. PS2019 常用快捷键大全
  18. 打开虚拟机 电脑自动重启解决办法
  19. win7时间运行服务器,win7系统无法启动Windows Time服务怎么处理【图文教程】
  20. 迅捷pdf转换器:如何将pdf转换成word

热门文章

  1. linux测试libreoffice,LibreOffice 7.0 开放测试,最终版本将于8月初发布
  2. apache tomcat linux 配置,linux下apache+tomcat配置
  3. php函数获取数据库中的表格,初步了解PHP获取数据库表信息函数_PHP教程
  4. java编程创建警告_java – 无法阻止ant生成编译器Sun专有API警告
  5. css选择器总结(内附实例及截图)
  6. openstack pike版本安装笔记6(dashboard组件,控制台)
  7. python 判断是字母的多种方法
  8. js遍历jstl数组
  9. 数据结构利器之私房STL(中)
  10. 深入理解计算机系统第四版_技术干货 |深入理解计算机系统之链接