目录
一、程序和进程
1.程序(二进制文件)
保存在硬盘、光盘等介质中的可执行代码和数据
文件中静态保存的代码
2.进程(前台进程和后台进程)
在CPU及内存中运行的程序代码,是程序运行的过程,动态,有生命周期及运行状态。
3.主进程(守护进程daemon)
保障服务运行的一个进程
4.小结
进程支持程序运行。
线程被包含在进程中,是进程中实际运作单位,也是操作系统中能够独立运行的基本单位,也称作轻量进程。一个进程中可以并发多个线程,每条线程可以并行执行不同的任务,而我们在任务管理器中看到的一个个进程则是我们下载的应用程序所产生的,当然一个应用程序也可以包含多个进程。
总的来说,打开一个应用程序,在后台运行相应的进程,点击应用程序中的某个功能之后由对应进程中的线程负责次功能的运行,这样就可以不用运行整个应用程序或者进程,便可以完成操作者的命令,节约了资源利用率,也增强了cpu的吞吐率。
一个任务:多条线程同时执行。
二、线程
1.线程五种状态
新建 可运行 运行 阻塞 死亡
ps:时间片(timeslice)可运行状态(runnable)
CPU的时间分片:以1s为一个周期,均分为x份,每一份全力处理其中一个任务。
①新建:
新创建一个线程对象
②可运行:
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。
③运行:
可运行状态的线程获得了cpu时间片,执行程序代码。
④阻塞:
阻塞状态时指线程因为某种原因放弃了cpu使用权,也即让出了cpu时间片,暂时停止运行。知道线程进入可运行状态,才有机会再次获得cpu 时间片转到运行状态。
阻塞的情况分三种:
1)等待阻塞:
运行的线程执行o.wait()方法,jvm会把该线程放入等待队列中。(先后处理关系)
2)同步阻塞:
运行的线程再获取对象的同步锁时,若该同步锁被别的线程占用,则jvm会把该线程放入锁池中。(串并行)
3)其他阻塞:
运行的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,jvm会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程中止或者超时、或者I/O处理完毕时,线程重新转入可运行状态。
⑤死亡:
线程run()、mian()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。
进程创建(类似主进程)
分配任务(类似子进程)
执行任务(类似线程)
回收进程资源