开发写的代码咱们称为程序,那么将开发的代码运行起来。咱们称为进程。并发
明白点: 当咱们运行一个程序,那么咱们将运行的程序叫进程。异步
👉精简重点👈操作系统
进程是申请一块内存空间,将数据放到内存空间中去, 是申请数据的过程 是最小的资源管理单元
👉精简重点👈线程
是进程的一条流水线, 只用来执行程序,而不涉及到申请资源, 是程序的实际执行者 最小的执行单元
咱们打开一个聊天软件,这就是开启了一个进程 当咱们在软件里面打开一些功能,好比空间, 扫一扫, 设置...,这些操做就是线程 因此能够说 "进程" 包含 "线程", "线程" 是 "进程" 的子集
工厂流水线例子:
code
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位
。blog
线程:系统分配处理器时间资源的基本单元,或者说进程以内独立执行的一个单元执行流。线程——程序执行的最小单位
。生命周期
进程要分配一大部分的内存,而线程只须要分配一部分栈就能够了.队列
一个程序至少有一个进程,一个进程至少有一个线程.进程
一个线程能够建立和撤销另外一个线程,同一个进程中的多个线程之间能够并发执行.事件
单核下使用多道技术实现
并行必须有多核才能实现,不然只能实现并发(伪并行)
进程在运行的过程当中不断地改变其运行状态 一般一个运行的进程必须具备三种状态:就绪态, 运行态, 阻塞态
正在执行的进程, 因为等待某个事件而没法执行时, 便被操做系统剥夺了cpu的操做时间, 这是就是阻塞态
引发阻塞的缘由多种, 例如: 等待I/O操做, 更高优先级的任务抢走了CPU权限等.
一个进程在运行期间, 会不断地在一种状态切换到另外一只种状态 他能够是屡次处于就绪态和运行态, 也能够屡次处于阻塞态, 下图是三种状态的转换图
处于就绪态的进程, 当进程调度程序为之分配了CPU的时间片后, 该进程就会由就绪态转变成运行态
处于运行态的进程在运行过程当中, 由于分配的时间片用完了, 因而失去了CPU的使用权限, 运行态就会从新转为就绪态
正在运行的进程因为遇到I/O操做或被更高优先级的任务抢走CPU使用权限而没法继续执行, 便从运行态转为阻塞态
处于阻塞态的进程, 若其等待的事情已经处理完毕, 因而进程从阻塞态转为就绪态
❶你叫我去吃饭, 我听到了就当即和你去吃饭, 若是没有听到, 你就不停的叫, 直到我告诉你听到了, 才一块儿去吃饭
❷打电话比如同步, 两边是同时进行不能再打给另外一我的
❶你叫我去吃饭, 而后本身去吃饭了, 我获得消息后可能当即走, 也可能过会儿走
❷发消息比如异步, 和一我的发完消息就可能和另外一我的发消息
😮忙时会有成千上万的任务须要被执行,闲时可能只有零星任务。 😒那么在成千上万个任务须要被执行的时候,咱们就须要去建立成千上万个进程么? 😓首先,建立进程须要消耗时间,销毁进程也须要消耗时间。 😟第二即使开启了成千上万的进程,操做系统也不能让他们同时执行,这样反而会影响程序的效率。 😥所以咱们不能无限制的根据任务去开启或者结束进程。那么咱们要怎么作呢?
😺定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务
😸等处处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务
😹若是有不少任务须要执行,池中的进程数量不够,任务就要等待以前的进程执行任务完毕归来,拿到空闲进程才能继续执行。
😻也就是说,进池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行
😼这样不会增长操做系统的调度难度,还节省了开关进程的时间,也必定程度上可以实现并发效果。
👉管理进程负责建立资源进程,把工做交给空闲资源进程处理,回收已经处理完工做的资源进程。
😱管理进程如何有效的管理资源进程,分配任务给资源进程? 👉经过IPC,信号,信号量,消息队列,管道等进行交互。
🍦🍧🍨