进程,线程
单核cpu一次只能执行一个任务,
电脑运行速度
cpu程序运行:时间片轮训,调度算法
优先级调度算法
视觉散流:1/24秒
并发和并行:
并行:真正的同时执行多个任务
并发:操做系统就是并发的,看起来是同时执行的
操做系统实现多任务的原理是::
经过调度算法调度任务执行实现多任务
进程的建立---fork() 叉
fork:叉,餐叉,靶,叉起,分叉,分歧
进程:代码,cpu,内存,磁盘,网络资源
代码是程序:运行的程序时进程。
进程是分配资源的最小单位
pid是进程号,pid子进程= 0 父进程返回子进程pid大于0的
方便管理进程
建立完fork()以后,各自执行各自的
对于子进程pid = =0
孤儿进程:父进程先死,子进程再死
僵尸进程:子进程先死,父进程再死
僵尸进程:弊端:僵尸仍然占用资源,么有释放。
解决僵尸进程:咱们的子进程回收,经过父进程进程回收
os.wait 资源回收,
多进程开发:须要回收子进程资源
获取pid :getpid():获取当前进程的pid,getppid():获取父类pid
fork完成之后资源进行了拷贝,不共享全局变量
fork完成以后,系统调度进行致使,执行流程操做系统说了算,根据现状,有可能让子进程先执行也有可能让父进程先执行
执行无序性:
Process(group【】)
target= 指定继承要执行的任务
agrs,参数:任务参数
args,是一个
kwargs:调用对象的关键字参数字典
name。为当前进程实例的别名
group:大多数状况下用不到,进程分组
Process类经常使用属性:
name;
pid:
is_alive:进程死活
join:回收进程资源,默认阻塞 join 必须在terminate以后
terminate:进程终止,不回收资源
总结:
多任务的概念:
多任务的实现原理:经过调度算法实现1,时间轮流,2 ,优先级
并行并发:
并行:一块儿执行的
并发:看起来是一块儿执行的,对人来讲的,
计算机是怎么调度任务的:跟换进程任务,经过中断,来实现
qq,经过中断,qq中的全部资源,快照,保存状态,
挂起:执行挂起的,会保存当前的状态,
fork():建立新的进程:给咱们返回两个值
经过pid返回值来判断实现多任务的
fork主进程和子进程有设么关系
fork后的子进程会把主进程的全部资源拷贝(代码执行状态)
僵尸进程的危害:僵尸进程会占用系统资源
经过wait回收进程资源,
僵尸进程:子进程死了,主进程没死,子程序还占有资源
孤儿进程:会丢到1号进程
多进程修改全局变量:多进程资源不共享
屡次for问题:依赖fork建立过程
为了便于回收资源,解决方案:只有一个主进程:让主进程生成
子进程,
multiProcessing
经过process类,
1.导入
2.定义子进程执行方法
3.初始化process对象(args元组最后要加一个,)
4.start启动咱们进程
5.join回收资源(多个子进程回收)
5.join阻塞回收
阻塞超时,若是子进程没有执行完,就走了,若是执行
process子类
重写run方法,其它方法和proces方法同样
进程池pool 随用隧取,提升了效率
进程多了影响运行效率:
解决办法:再建一个模块,实时检测cpu和进程的运行状态,动态的
调整
queue==进程间通讯----队列
特色:先进先出
目的:方便进程间管理
pool:1构造进程池(指定进程数量)默认回收,老爹死的时候带全部儿子
共赴黄泉---join()阻塞等待回收全部的子进程
调用完close()的时候,关闭进程池,不能再添加任务,
进程的通讯:queue队列:
队列process使用了multiprecess queue
进程池使用manager中的queue
1.建立队列
2.个人子进程启动的时候,把队列传递到子进程中
3.A进程--》B进程,建立一个队列,B-->A再建立一个队列
queue使用方法:get put最后阻塞等待,2,put_nowait以判断空或者满
try捕获异常
线程部分
1.线程:进程中的代码流程
进程和线程的区别:
1.进程最小的资源分配单位,线程最小的任务调度单位
2.进程占有独立的资源,线程共享进程中的资源
3.进程建立和调度开销大,效率低,线程相反
4.线程依赖于进程,一个进程至少有一个线程
5.全局资源:线程不安全,进程安全
多线程threading
1.建立过程:1定义线程方法
2.实例化线程对象 target,args(,)启动线程,回收线程,线程的执行顺序:无序的,操做系统的调度形成的
2.全局变量:线程共享全局资源,线程之间通讯方便,效率高,线程不安全(经过线程同步解决不安全)
3.互斥锁:
mutex = threading.Lock() 建立锁
mutex.acquire() 锁定
mutex.release() 释放
4.queue实现线程之间的通讯,