进程:
进程是程序运行的实例。
运行一个Java程序的实质就是启动一个java虚拟机进程。
进程是系统进行资源分配的基本单位。
一个程序至少一个进程,
线程:
线程是进程的一个实体,是 CPU 调度和分配的基本单位,
它是比进程更小的能独立运行的基本单位。
线程自己不拥有任何系统资源,但同一个进程中的所有线程共享该进程的资源。
一个进程至少有一个线程
区别:
1、进程是资源分配最小单位,线程是程序执行的最小单位;
2、进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间。
而线程没有,线程是进程的一个实体,一个进程至少有一个线程,同一个进程的所有线程,共享所属进程的资源。
3、线程占用的资源比进程少很多,不拥有任何系统资源,所以创建线程和切换线程的开销相对来说很小。
进程上下文切换开销大。
4、一个进程的挂掉不会对其他进程造成影响。而一个线程挂掉了,(可能会锁住资源)造成整个进程都死掉了。