什么是进程?
前面我们说过,进程是一个正在运行的程序。比如,在Windows系统中,一个正在执行的.exe文件就是一个进程,每一个进程都有独立的内存空间和资源(内存资源,硬盘资源,宽带资源等等)。
由于进程的创建,销毁和切换的开销很大,为了解决开销大的这个问题,大佬们就提出了线程的概念。
什么是线程?
线程就是轻量级进程。同一个进程中的多个线程可以共享进程中的堆区资源、代码区和数据区的资源,但是每一个线程都有属于自己的虚拟机栈、本地方法栈和程序计数器,这使得多个线程在切换的过程中的开销不是很大,所以线程被称为轻量级进程。
进程与线程的联系
一个进程中可以包含多个线程,但是一个进程中至少要包含一个线程。进程为线程的运行提供了资源和空间,也就是说线程是要依附于进程执行的。且同一个进程内的线程可以共享该进程的资源。但是每一个线程在进程中都有都属于自己的栈区。
如下图
进程与线程的区别
1.根本区别:进程是操作系统进行资源分配的基本单位,线程是CPU上处理任务调度执行的基本单位。
2.资源开销:每一个进程都有自己独立的代码和数据空间(程序上下文),所以导致进程间的切换的开销很大。但对于线程来说,虽然每一个线程都有属于自己独立的运行栈和程序计数器,且同一个进程内的线程也会共享进程中的代码和数据空间(程序上下文),所以线程之间的切换的开销相对于进程来说,将低了很多。
3.包含关系:一个进程中可以包含多个进程,但是一个进程中必须要有一个线程,也就是主线程。
4.影响关系:进程都有属于自己的内存地址和资源空间,可以说,一个进程的是否成功运行不会影响另一个进程的成功运行。但是对于线程来说,同一个进程中的线程共享了进程中的一部分资源,所以,一个线程的崩溃有可能导致整个进程的崩溃。所以多进程要比多线程健壮。
5.内存分配:多个进程之间的内存地址和数据资源是相互独立的,但是多个线程之间共享了进程中的部分资源,线程之间不是完全独立的。
6.执行过程:每一个进程都有属于自己的程序执行入口,程序执行序列和程序执行出口,但是线程不能独立进行,必须依存于程序的运行中,线成的运行可以并发执行。