一、进程
1、定义:进程是程序的执行实例,是操作系统分配资源(CPU、内存、文件等)的基本单位。
2、特点:
(1)独立性:每个进程拥有独立的地址空间、代码、数据和系统资源;
(2)隔离性:一个进程崩溃通常不会影响其他进程(稳定性高);
(3)开销大:创建、销毁或者切换进程时,操作系统需要分配/回收资源,成本较高;
3、eg同时运行的浏览器和音乐播放器是两个独立的进程,它们的内存和资源完全隔离。
二、线程
1、定义:线程是进程内的执行单元,是CPU调度的基本单位。一个进程可以包含多个线程。
2、特点:
(1)共享资源:同一个进程内的线程共享内存、文件等资源,通信成本低;
(2)轻量级:创建、切换线程的开销远小于进程(因为无需分配新地址空间);
(3)协作性:线程需要同步来避免资源竞争;
3、eg浏览器的一个标签页可能用一个线程加载页面,另一个线程播放视频,共享浏览器的内存空间。
三、区别和联系
维度 | 进程 | 线程 |
资源分配 | 独立的内存和系统资源 | 共享所属进程的内存和资源 |
切换开销 | 高(需保存/恢复整个地址空间) | 低(只需保存寄存器、栈等少量状态) |
通信方式 | 进程间通信(IPC):管道、消息队列等 | 直接读写共享内存(需同步机制) |
健壮性 | 一个进程崩溃不影响其他进程 | 一个线程崩溃可能导致整个进程退出 |
创建/销毁 | 速度慢,消耗资源多 | 速度快,消耗资源少 |
并发性 | 多进程可跨CPU核心并行执行 | 多线程可在一个进程内并发执行 |
这张图带大家直观感受进程和线程的区别:
四、为什么需要线程
1、性能:线程切换比进程切换快得多,适合高并发任务(如Web服务器处理大量请求)。
2、资源共享:线程可直接访问共享数据,避免IPC的复杂性和开销。
3、多核利用:多线程能充分利用多核CPU的并行计算能力。
五、实际应用
1、多进程:需要高稳定性(如浏览器每个标签页独立进程)、隔离性(如安全沙箱)。
2、多线程:需要高效协作(如游戏渲染+逻辑线程)、高并发(如数据库连接池)。
总结:进程是资源分配的单元,线程是CPU调度的单元;选择多进程还是多线程取决于对隔离性、性能还有开发复杂度的权衡。