进程与线程的定义
- 进程:进程是操作系统进行资源分配和调度的一个独立单位。它是应用程序运行的实例,拥有独立的内存空间。每个进程至少有一个线程,即主线程。
- 线程:线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如执行栈),但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。
资源拥有
- 进程:每个进程都有自己的一套独立的地址空间,一般来说,进程间的资源是不共享的。
- 线程:同一进程内的线程共享进程的地址空间和资源,如内存、文件句柄和其他资源。
执行独立性
- 进程:进程是独立运行的,一个进程崩溃不会直接影响到其他进程。
- 线程:线程之间是相互依赖的,同一进程下的一个线程崩溃可能会影响到其他线程。
并发与并行的定义
- 并发:并发是指在单个时间段内,多个任务看起来像是同时执行的。它强调的是多个任务在宏观上同时进行,但实际上它们可能在微观上是交替执行的。
- 并行:并行是指多个任务在物理上同时执行。它强调的是多个任务在多个处理器或多个核心上真正同时进行。
时间维度
- 并发:并发关注任务在时间上的重叠,即多个任务在时间上交错执行,给用户一种“同时”进行的错觉。
- 并行:并行关注任务在物理上的并发,即多个任务在不同的硬件资源上同时执行。
执行方式:
- 并发:并发的执行可能涉及到任务的切换和调度,例如操作系统在单个CPU上通过时间片轮转来实现多个进程或线程的并发执行。
- 并行:并行的执行是真正的同时执行,每个任务都在自己的处理器或核心上运行。
性能:
- 并发:并发可以提高程序的响应性和吞吐量,但可能不会显著提高单个任务的执行速度。
- 并行:并行可以显著提高程序的执行速度,特别是在处理大量独立任务时。
应用场景:
- 并发:并发适用于需要处理多个任务的场景,如服务器处理多个客户端请求。
- 并行:并行适用于需要大量计算的场景,如科学计算、图像处理等。