前言
虽然各种框架技术日益更新,但终究逃不过基础,年轻人,耗子尾汁,别再犯这样的聪明,小聪明啊。
正文
进程
-
程序由指令和数据组成,而指令要运行、数据要读写,就必须将指令加载到 CPU 里,数据加载到内存。
-
在指令运行过程中还要用到其他资源(磁盘、网络)。 进程就是用来加载指令、管理内存、管理IO的
-
当一个程序被运行,从磁盘加载到内存,就代表开启一个进程。
-
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。
例如:进程可以看作程序的一个实例,如电脑里的 记事本、QQ、浏览器
线程
- 一个进程可以有一个到多个线程,各个线程之间共享程序的内存空间。
- 一个线程代表一个指令流,将指令流中的一条条指令按照一定顺序交给CPU执行
- 是程序执行流的最小单元,是处理器调度和分派的基本单位。
区别
独立性
- 进程之间基本上相互独立,线程存在与进程内,相当进程的一个子集
资源共享
- 进程拥有共享资源,如内存空间,供其内部的线程之间共享
通信
-
进程间通信比较复杂
- 同一台计算机的进程通信为 IPC
- 不同计算机之间的进程通信,需要走网络和协议,如 HTTP
-
线程相反,因为它们共享进程内部的内存,如多个线程共同访问同一个共享变量。
切换成本
-
线程更轻量,上下文切换成本一般是低于进程的。
PS:上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程或线程切换到另一个进程或线程。
大小定位
- Java 中,线程作为最小调度单位,进程作为资源分配最小单位