进程是资源分配的最小单位,线程是CPU调度的最小单位
做个简单的比喻:进程=火车,线程=车厢
线程在进程下行进(单纯的车厢无法运行)
一个进程可以包含多个线程(一辆火车可以有多个车厢)
不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
进程可以拓展到多机,线程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”
进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”
一个线程挂掉不一定会导致进程挂掉,java中如果一个线程爆栈了或者OOM了,其他线程不会受影响。但是其他情况或者大多数情况整个进程都GG。
2019-11-5补充:
进程与线程五大区别——进程是线程的boss
1、根本区别—进程管资源、线程管执行:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。进程是资源分配最小单位;线程是程序执行的最小单位。
2、内存分配—进程拥有独立的地址空间
3、资源开销—进程比线程开销大、线程可频繁切换
4、内部通信—线程通信更方便、进程间通信需IPC
5、资源开销—线程可以看做轻量级的进程
6、 环境运行—线程是进程的一部分、进程可有多个线程
————————————————
原文链接:https://blog.youkuaiyun.com/qq_41185868/article/details/102553484