目录python
串行和并发都是程序处理任务的方式linux
进程指的是正在运行中的程序,是操做系统调度以及进行资源分配的基础单位编程
是一个资源单位windows
当把一个程序从硬盘读入到内存,进程就产生了浏览器
进程来自于操做系统,由操做系统进行调度以及资源分配安全
多进程的实现原理其实就是操做系统调度进程的原理服务器
实现原理:多线程
1.空间复用 并发
同一时间,加载多个任务到内存中,多个进程之间内存区域须要相互隔离(这种隔离是物理隔离),其目的是为了保证数据安全socket
2.时间复用
操做系统会在多个进程之间作切换执行
切换任务的两种状况
当一个进程遇到了IO操做时会自动切换
当一个任务执行时间超过阈值会强制切换(时间不会太长,切换的够快用户就感觉不到是串行的)
注意:在切换前必须保存状态,以便后续恢复执行。而且频繁的切换也须要消耗资源
其实当全部任务都没有IO操做时,切换执行(上下文切换)效率反而更低,可是为了保证并发执行,必须牺牲效率
简单的总结就是切换加保存
有了多道技术,计算机就能够同时并发的处理多个任务
串行:自上而下顺序执行
并发:多个任务同时执行,可是本质是在多个进程之间切换执行,因为速度很是快因此感受是同时运行
并行:是真正的同时运行,必须具有多核CPU,有几个核心就能并行几个任务,可是任务数量超过核心数时仍是并发执行
以上三个概念都是用于描述处理任务的方式
阻塞:指的是程序遇到了IO操做,没法继续执行代码时的一种状态
非阻塞:指的是程序没有遇到IO操做的一个状态
input() 默认是一个阻塞的操做
咱们能够用一些手段将阻塞的操做变成非阻塞的操做,例如非阻塞的socket
一个进程的三种状态
阻塞
运行
就绪
野指针,僵尸指针,内存泄漏
野指针:变量名没有删除
僵尸指针:变量值没有被使用可是引用计数却不为0
对于计算机而言,必须具有建立和销毁进程的能力
建立:
用户的交互式请求,鼠标双击
系统初始化
销毁:
程序是一堆代码放在一个文件中,一般后缀是exe,本来是储存在硬盘上的
进程是将代码从硬盘读取到内存而后执行,产生的
进程是由程序产生的
一个程序能够产生多个进程,例如qq多开,每个进程都具有一个PID,且是惟一的
在linux中,进程具有父子关系,是一个树状结构,能够相互查找,但不能使用
当一个程序开启了另外一个不属于本身管理的资源,手里握着对方的地址信息,也就是句柄
在windows中,没有层级关系,父进程能够将子进程的句柄转让
父进程 子进程?
例如qq开启了浏览器,那么qq是父进程,浏览器是子进程
PID 当前进程的编号
PPID 父进程的编号
在pycharm中访问PID与PPID
import os os.getpid() os.getppid()
在cmd中查找程序的pid
tasklist | findstr python
注意:当咱们运行Py文件时,其实运行的是python解释器进程