进程与线程
进程与线程
进程
程序由指令和数据组成。进程是运行的程序的一个实例,是系统进行分配和调度的基本单位。每个进程都有独立的地址空间(即有自己的内存空间,包括代码段、数据段、堆和栈等)
进程之间相互隔离。(除非它们通过进程间通信(IPC)机制共享资源
进程的创建、调度、销毁通常都由操作系统内核控制,并创建和销毁进程的开销较大,因为它们涉及到资源的分配与回收。
线程
线程是进程内部的一个执行单元,是CPU调度与执行的基本单位。一个进程包含一个或多个线程,这些线程共享所属进程空间与资源(包括内存、文件等)。所以线程之间通信较容易,可以直接读写同一块内存区域
每个线程都有自己的程序计数器、栈(用于存储函数调用和局部变量)和一组寄存器,但不拥有自己独立的地址空间。
线程的创建和切换相较于进程更为轻量级,因为它们不需要重新分配资源,这使得线程成为实现并发处理和提高程序响应速度的有效手段。
线程之间需要协调访问共享资源,以避免竞态条件和数据不一致的问题,常见的同步机制包括互斥锁、信号量和条件变量等。
二者对比
进程基本相互独立;线程存在一个进程中,是进程的一个子集
进程拥有共享资源,如内存空间,供其内部线程共享
进程间通信较复杂
同一计算机的进程间通信称IPC(Inter-process communication)
不同计算机间通信,需要通过网络,并遵循共同的网络协议,如HTTP
线程通信相对简单,因为它们共享线程,如多个线程可访问同一个共享变量
线程更轻量,线程上下文切换成本比进程上下文切换低。
并行与并发
并行:多核 cpu下,每个 核(core) 同时调度运行线程
并发:线程轮流使用CPU的做法称为并发。
如果判断并行与并发:看看是不是同一时刻在执行。同一时刻执行,并行;否则是并发。
并发:
单核 cpu 下,线程实际还是 串行执行 的。操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows 下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感 觉是 同时运行的 。总结为一句话就是: 微观串行,宏观并行 ,一般会将这种 线程轮流使用 CPU 的做法称为并发
并行:
多核 cpu下,每个 核(core) 都可以调度运行线程,这时候线程可以是并行的。
总结
进程与线程:
-
地址空间:
-
进程是程序的一个实例,有子集独立的地址空间;
-
线程是进程的子集,虽然有自己的程序计数器、栈、一组寄存器,但不拥有自己独立的地址空间
-
-
分配:
-
进程创建、调度、销毁由系统内核控制,创建销毁开销大
-
线程创建与切换较进程更为轻量,不需重新分配资源
-
-
通信
-
进程之间相互隔离,除非通过一些机制进行通信
-
线程之间通信较容易,可直接读写同一块内存区域
-
并行与并发
-
并行:多核 cpu下,每个 核(core) 同时调度运行线程(同时执行)
-
并发:线程轮流使用CPU的做法称为并发。(非同时执行)