线程与进程
进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。多进程操作系统能同时运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的 CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在 “同时” 运行一样。
线程和进程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是在进程的基础之上进行的进一步划分。多线程是实现并发机制的一种有效手段。所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行。 一个进程可能包含多个同时执行的线程,如图所示。
关于进程与线程
如果要想解释多线程,那么首先应该从单进程开始讲起,最早的 DOS
系统有一个最大的特征: 一旦计算机出现病毒,计算机会立刻死机,因为传统 DOS
系统属于 单进程 的处理方式,即 在同一个时间段上只能有一个程序执行。后来到了 Windows
时代,计算机即使(非致命)存在病毒,也可以正常使用,只是慢一些而已,因为 Windows
属于 多进程 的处理操作,但是这时的资源依然只有一块,所以在同一个时间段上会有多个程序共同执行,而在一个时间点上只能有一个程序在执行。多线程是在一个进程基础上的进一步划分,因为进程的启动所消耗的时间是非常长的,所以在进程上的进一步的划分就变得非常重要,而且性能也会有所提高
通过 Word 的使用了解进程与线程的区别
读者应该都有过使用 Word 的经验,在 Word 中如果出现了单词的拼写错误,则 Word 会在出错的单词上划出红线。实际上每次启动一个Word 对于操作系统而言就相当于启动了一个系统的进程,而在这个进程上又有许多其他程序在运行(例如:拼写检查),这些就是一个个线程。如果 Word 关闭了,则这些拼写检查的线程也会消失,但是如果拼写检查的线程消失了,并不一定会让 Word 的进程消失。
所有的线程一定要依附于进程才能够存在 ,那么进程一旦消失了,线程也一定会消失。而 Java 是为数不多的支持多线程的开发语言之一。