【㉿Java并发】你能说说进程与线程的区别吗

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

进程与线程的区别

  • 进程是资源分配最小单位,线程是程序执行的最小单位;
  • 进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据;
  • CPU切换一个线程比切换进程花费小;
  • 创建一个线程比进程开销小;
  • 线程占用的资源要⽐进程少很多。
  • 线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据,进程之间的通信需要以通信的方式(IPC)进行;(但多线程程序处理好同步与互斥是个难点)
  • 多进程程序更安全,生命力更强,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间),多线程程序更不易维护,一个线程死掉,整个进程就死掉了(因为共享地址空间);
  • 进程对资源保护要求高,开销大,效率相对较低,线程资源保护要求不高,但开销小,效率高,可频繁切换;

加深理解

  • 线程在进程下行进
  • 一个进程可以包含多个线程
  • 不同进程间数据很难共享
  • 同一进程下不同线程间数据很容易共享
  • 进程要比线程消耗更多的计算机资源
  • 进程间不会相互影响,一个线程挂掉可能导致整个进程挂掉
  • 进程可以拓展到多机,线程适合多核
  • 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。-"互斥锁"
  • 进程使用的内存地址可以限定使用量-“信号量”

 

参考:

 

posted @ 2023-03-16 18:02  残城碎梦  阅读(14)  评论(0编辑  收藏  举报