highlight: arduino-light
什么是程序?什么是进程
######## 什么是程序
程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象
######## 什么是进程
1、进程(process)是程序的一次执行过程,或是正在运行的一个程序
2、进程是一个动态的过程:有它自身的产生、存在和消亡的过程,是具有生命周期的
3、进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域
######## 进程举例和两者区别
进程举例:运行中的 QQ,运行中的 MP3 播放器等等都是进程
两者区别:程序是静态的,进程是动态的。
线程
线程(thread):进程可进一步细化为线程,线程是一个程序内部的一条执行路径
若一个进程同一时间并行执行多个线程,那么就说这个进程就是支持多线程的
线程作为调度和执行的单位,每个线程拥有【独立的运行栈和程序计数器(pc)】,且共享【堆和方法区】,线程切换的开销小
一个进程中的多个线程共享相同的【内存单元/内存地址空间】它们从同一个堆中分配对象,可以访问相同的变量和对象
这就使得线程间通信【更简便、高效】。但多个线程操作共享的系统资源可能就会带来安全的隐患。
cpu
# 单核 CPU 和多核 CPU
单核 CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务
例如:虽然有多车道,但是收费站只有一个工作人员在收费,只有收了费才能通过,那么CPU就好比收费人员
如果有某个人不想交钱,那么收费人员可以把他“挂起”(晾着他,等他想通了,准备好了钱,再去收费)
但是因为CPU时间单元特别短,因此感觉不出来。如果是多核的话,才能更好的发挥多线程的效率【现在的服务器都是多核】
一个Java应用程序至少有三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。当然,如果发生异常,会影响主线程
线程的状态
NEW,(新建),RUNNABLE,(准备就绪),BLOCKED,(阻塞),WAITING,(不见不散),TIMED_WAITING,(过时不候), TERMINATED;(终结)
管程
监视器 通俗点就是锁,是一种同步机制,保证同一时间只有一个线程访问被保护的程序,jvm同步基于进入和退出,使用管程对象实现的。