深入理解Java中的进程和线程
1.进程是程序运行资源分配的最小单位
进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘IO等,同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,
程序是死的、静态的,进程是活的、动态的。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身,用户进程就是所有由你启动的进程
2.线程是CPU调度的最小单位,必须依赖于进程而存在
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
3.线程无处不在
任何一个程序都必须要创建线程,特别是Java不管任何程序都必须启动一个main函数的主线程; Java Web开发里面的定时任务、定时器、JSP和 Servlet、异步消息处理机制,远程访问接口RMI等,任何一个监听事件, onclick的触发事件等都离不开线程和并发的知识
进程与线程的区别
以沙箱为例进行对比阐述。一个进程就好比一个沙箱。线程就如同沙箱中的孩子们。孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其他沙箱中的其他孩子。因此,每个进程就像一个被保护起来的沙箱,未经许可,无人可以进出。
进程 | 线程 | |
---|---|---|
定义 | 进程是程序运行的一个实体(包括:程序段、相关的数据段、进程控制块PCB)的运行过程,是系统进行资源分配和调度的一个独立单位 | 线程是进程运行和执行的最小调度单位 |
活 泼 性 | 不活泼(只是线程的容器) | 活泼,随时可以创建和销毁 |
系 统 开 销 | 创建、撤消、切换开销大,资源要重新分配和收回 | 相对于进程仅保存少量寄存器内容,开销小在进程的地址空间执行代码 |
拥 有 资 产 | 资源拥有的基本单位 | 相对于进程来说基本上不拥有资源,但会占用CPU |
地 址 空 间 | 系统赋予的独立的内存地址空间 | 线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量 |
调度 | 仅是资源分配的基本单位 | 独立调度、分派的基本单位 |
安全性 | 进程之间相对比较独立,彼此不会互相影响 | 线程共享同一个进程下面的资源,可以相互通信和互相影响 |