0207 软件是如何运行和崩溃的?
2020-02-07 16:05:00来源:博客园 阅读 ()
0207 软件是如何运行和崩溃的?
背景
程序员的任务是写代码【软件】,代码【软件】本身无价值,代码【软件】运行起来才能实现价值。
运行
以java程序为例:
首先把代码通过编译器编译成可执行代码。
运行过程:冯洛伊曼模型
- 操作系统从磁盘中加载 程序(代码)到内存,程序变成了进程;
- 操作系统调度cpu给到进程,完成计算任务;
- 操作系统协调io设备,输出计算结果;
内存模型:
程序代码?
程序代码中的数据结构;
数组需要分配内存到堆上;
数据结构对应的内存地址分配到栈上;
程序执行过程:基于栈帧
进程的状态:
- 运行(获得cpu,正在执行计算)
- 就绪(差cpu资源)
- 堵塞(获得cpu也无法完成计算)
因为进程的切换代价太大,操作系统引入了线程。
一台计算机如何运行多个计算任务?
基于cpu的共享分时技术(时间片轮转)? + 多线程 ;
崩溃
以一个简单的tomcat+javaweb程序为例:
首先看运行模型:
当多个线程需要修改共享数据的时候,为了保证数据的一致性,引入了操作系统的锁;
一个请求对应一个线程,如果请求数不断增加,就会有很多的线程因为锁而进入等待状态,导致程序响应变慢;
当等待线程超过系统的极限,程序会崩溃;
如何解决并发问题引起的系统变慢和崩溃?
使用分布式集群的方式替代单台服务器,资源多了,等待的线程就变少了;
此外,限流是为了控制等待线程数量超过系统极限而程序崩溃;
降级是为了减少非核心计算,集中资源;
问题?
操作系统和cpu的锁是如何实现的?
cpu:?
操作系统:PV原语
java: 基于CAS,把线程编号写到对象头中;
小结
1 程序是如何运行和崩溃的?
以java程序为场景,
程序员的工作内容主要是写码,而代码本身没有价值,把代码运行起来应用到业务场景中才能带来价值。
实际编程过程:ide中写代码,编译打包得到jar包,配置好运行环境【购买物理服务器,安装操作系统,安装jdk,安装tomcat,配置tomcat,上传jar包,使用shell启动程序,配置好网关,交付用户】
程序怎么运行的?
计算机都是基于冯洛伊曼结构
操作系统把jar包加载到内存中,程序变成了一个jvm的进程,分配和协调好CPU,io,进程就跑起来了。
程序中含有各种数据结构,cpu会把内存分配在堆中,把内存地址记录在栈里。
代码的执行基于栈帧,把函数的入参,局部变量放在栈里,后进先出,CPU的跳转指令可以嵌套函数调用。
一台服务器如何处理多任务?
首先操作系统可以运行多进程,基于时间片轮转法共享CPU,因为进程切换代价高昂,所以每个进程内又可以产生多个线程,每个线程可以处理一个任务.
程序是如何崩溃的?
以一个tomcat+javaweb程序为场景
物理服务器提供CPU,内存,磁盘,网络;
操作系统进行进程调度,硬件资源管理;
jvm进程主要进行虚拟机管理;
tomcat进行应用包装,分配多个线程处理请求,一个请求对应一个线程;
应用程序,处理业务逻辑;
当多线程修改共享数据的时候,操作系统为了保证数据一致性,加锁;
锁会带来大量线程等待,程序响应会变慢;当等待线程数超过系统极限,耗费有限资源比如CPU,内存,磁盘,程序会崩溃。
通过本篇,可以学会:
- 程序是如何运行的?jvm的内存结构和运行过程;
- 程序是如何崩溃的?如何解决或者缓解程序变慢或者崩溃的问题;
原创不易,转载请注明出处。
原文链接:https://www.cnblogs.com/snidget/p/12272592.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:SpringBoot的起步依赖
- Flink 如何分流数据 2020-06-11
- 老板让你抗住千万级流量,如何做架构设计? 2020-06-11
- 如何干掉 if else 策略+工厂 2020-06-11
- 类的继承,方法重新中修饰符如何定义 2020-06-10
- 如何写出高质量Spring 组件? 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash