进程、线程一张图

177 阅读2分钟

本文参与「新人创作礼」活动,一起开启掘金创作之路。

我的变强之路

image.png

1、一个程序启动是以进程的方式启动,进程内包含多个线程;
2、进程所需的资源由操作系统分配;
3、线程所需资源由CPU分配;
4、多个线程之间共享jvm运行时数据区的堆和方法区;
5、每个线程包含程序计数器、栈(虚拟机栈)和时间片且私有;
6、线程并不是一直执行,线程根据时间片占用CPU,时间片用完后让出CPU,此时线程处于阻塞状态,下次轮询的时候根据程序计数器中的执行地址继续执行;

另外说明一下,线程上下文切换:

理解线程上下文切换

内容:在多线程编程中,线程的数量一般都大于cpu个数,而每个cpu在同一时刻只能被一个线程使用,为了让用户感觉多个线程时在同时执行,cpu资源的分配采用了时间片轮转的策略,也就是给每个线程分配一个时间片,线程在时间片内占用cpu执行任务。当前线程的时间片使用完之后,就会处于就绪状态并让出cpu让其他线程占用,这就是上下文切换,从当前线程的上下文切换到其他线程,为了保证线程在下次轮转时知道自己上一次执行到了哪里,在切换线程上下文的时候需要保存当前线程的执行现场,当再次执行的时候根据保存的执行现场信息恢复执行现场。

线程上下文切换的时机有:当前线程cpu时间片使用完处于就绪状态时;当前线程被其他线程中断时;

理解:从一个线程切换到另一个线程执行,即切换占用cpu的线程过程