进程与线程
1. 进程
- 进程(Process):指一个内存中运行的应用程序,一个应用程序可以同时运行多个进程;
- 系统运行一个程序即是一个进程从创建、运行到消亡的过程;
- 进程是操作系统结构的基础,是程序的实体,是程序的一次执行过程,是系统运行程序的基本单位,也是线程的容器;
- 每个进程都有独立的内存空间和一组系统资源,每个进程的内部数据和状态都是完全独立的;
2. 线程
- 线程(Light Weight Process,LWP):进程中的一个执行单元,负责当前进程中程序的执行。一个进程中至少有一个线程,一个进程中也可以有多个线程,多线程的应用程序也可以称之为多线程程序;
- 线程由线程 ID、当前指令指针(PC)、寄存器集合和堆栈组成;
- 线程是程序执行流的最小单元,是被系统独立调度和分派的基本单位;
- 线程自己不拥有系统资源,只拥有少量在运行中必不可少的资源,但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源;
- 一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行;
3. 进程与线程的区别
- 进程:有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至少有一个线程;
- 线程:堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小的多;
4. 在 Java 中的使用
- 因为一个进程中的多个线程是并发运行的,那么从微观角度看也是有先后顺序的,哪个线程执行完全取决于 CPU 的调度,程序员是干涉不了的。而这也就造成的多线程的随机性;
- Java 程序的进程里面至少包含两个线程,主进程也就是 main() 方法线程,另外一个是垃圾回收机制线程。每当使用 Java 命令执行一个类时,实际上都会启动一个 JVM,每一个 JVM 实际上就是在操作系统中启动了一个线程,java 本身具备了垃圾的收集机制,所以在 Java 运行时至少会启动两个线程;
- 由于创建一个线程的开销比创建一个进程的开销小的多,那么我们在开发多任务运行的时候,通常考虑创建多线程,而不是创建多进程;