🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 多任务 * 指打开多个应用程序 * 静态程序加载到内存中一般要划分成: ➣ **数据区**(存放全局数据、程序中的静态数据) ➣ **代码区**(存放程序运行时的指令) ➣ **堆区**(对象、全局变量) ➣ **栈区**(函数调用、函数中的局部变量)等 <br/> ## 表现形式 * 表现形式一:应用程序打开后加载到内存里,就变成了进程,所以多任务的第一个表现形式是——**多进程** ➣ 多进程是多任务最直接的体现 <br/> * 表现形式二:多线程 ## 实现多任务的3中方式 * 多进程模式 * 多线程模式 * 多进程 + 多线程模式 <br/> # 进程 * Process,(正在执行中的程序) ➣ 是程序的基本执行体 ➣ 是线程的容器,可以包含多个线程 ➣ 是对各种资源管理的集合,里面包含对各种资源的调用、内存的管理、网络接口的调用等 <br/> * 每个进程都是独立的,有独立的内存空间,并且不能共享全局变量 ## 守护进程(孤儿进程) * 子进程是由父进程创建,如果父进程先退出,此时,子进程会被PID为1的进程(就是init进程) 接管(托孤给了init进程)。这样进程就不会受终端退出影响了,使用这个特性可以创建后台执行的程序 ## 僵尸进程 * 如果子进程先退出,父进程还没有退出,那么子进程就必须等到父进程捕获到子进程的退出状态 才真正的结束,这个时候子进程就成为僵尸进程(僵尸进程:只保留一些退出信息供父进程查询) # 线程: * 是系统进行运算调度的最小单位 * 一个标准线程由:线程ID,当前任务指针,寄存器集合和堆栈组成 * 每个程序至少有一个线程,如果程序只有一个线程,那就是程序本身 * 线程自己不拥有系统资源,它与同属一个进程的其它线程共享进程所拥有的全部资源 * 一个线程可以撤销另一个线程 * 同一个进程中多个线程可以并发执行 ## 线程基本状态: * **就绪状态**:具备运行的所有条件,逻辑上可执行,等待处理机 * **运行状态**:线程占有处理机正在运行 * **阻塞状态**:线程等待某个事件(满足条件),逻辑上不可执行 # 线程、 进程——区别: * **一个程序至少有一个进程,一个进程至少有一个线程** 这句话面试时,重要程度 ***** 五颗星 ***** | 线程 | 进程 | | --- | --- | | 共享内存空间 | 内存是独立的 | | 同一个进程内的线程可以互相交流 | 进程之间进行通信交流,需要使用中间代理实现 | | 创建新线程容易 | 创建新进程需要对其父进程进行一次克隆 | | 一个线程**可以控制**和**操作同一进程里**的其他线程 | 进程只能操作子进程 | | 改变主线程(如优先权),会影响其他线程 | 改变父进程,不影响子进程 |