美文网首页
Java并发(一)进程和线程

Java并发(一)进程和线程

作者: 头顶青天_脚踏实地 | 来源:发表于2020-04-01 11:26 被阅读0次

要掌握多线程,必须分清楚进程和线程

进程【process】,是指计算机中已运行的程序,用户下达运行程序的命令后,就会产生进程。同一程序可产生多个进程(一对多关系),以允许同时有多位用户运行同一程序,却不会相冲突。(来自维基百科)

例如,你可以同时登陆两个甚至多个QQ号,这就是同一程序产生了多个进程的例子。

线程【thread】是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在【进程】之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。(来自维基百科)

例如,在Java中,我们启动main方法就是启动了一个JVM进程,而main方法所在的线程就是主线程,在main方法中我们可以启动多个线程来做不同的事情。

操作系统将资源分配给进程,但是CPU资源比较特殊,它是分配给线程的,也就是说线程才是真正占用CPU资源的东西,可以说线程是使用CPU资源的基本单位。

我们需要了解【轮询】的概念,轮询【Polling】是一种CPU决策如何提供周边设备服务的方式,又称【程控输入输出】(Programmed I/O)。轮询法的概念是:由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始。
时间片【timeslice】是分时操作系统分配给每个正在运行的线程微观上的一段CPU时间,是从线程开始运行直到被抢占的时间。时间片通常很短(在Linux上为5ms-800ms),用户不会感觉到。

CPU的执行方式是【轮询】【时间片】让线程使用,即线程在CPU给的时间片内使用CPU,等到时间片结束,就必须等待下次CPU将时间片轮询给它,那么就会产生一个问题,我上次执行到哪里了,下次开始从哪里开始?这需要初步了解线程的内存模型。
进程&线程

解析上图:

计数器:它记录了上次CPU执行线程让出时间片时的内存地址,说人话,就是记录上次执行到哪里了。
栈:用于存储单个线程内存的局部变量,它是线程私有的,不允许别的线程访问。
堆:它是进程中最大的一块内存区域,被进程中所有的线程共享,任何线程都可以访问它,用来存放对象实例。
方法区:用来存放JVM加载的类、常量、静态块等,也是所有线程共享的。

相关文章

网友评论

      本文标题:Java并发(一)进程和线程

      本文链接:https://www.haomeiwen.com/subject/otiractx.html