|
#多任务-进程
##02.什么是进程
程序运行后就叫进程
程序是没有运行的,运行起来后就叫进程
**区别:**程序在没有运行之前没有资源,运行后就能分配资源 如:内存、显卡……
###2.1进程 1.程序:如xxxx.xx这是程序,是一个静态的 2.进程:一个程序运行起来后,代码+用到的资源称为进程,它是操作系统分配资源的基本单元·不仅可以通过线程完成多任务·进程也是可以的
###2.2进程的状态 工作中,任务数往往大于CPU的核数,即有一些任务正在执行,而另一些任务在等待CPU进行执行,因此导致了有不同的状态 ●就绪态:运行的条件都已经过去,正在等待CPU执行 ●执行态:CPU正在执行其功能 ●等待态:等待(堵塞)某些条件满足。如一个程序的sleep了,就处于等待态
####2.2.1进程数 ●进程之间相互独立 ●在一定范围内“越多越好”——增加进程浪费了内存,但提高了效率 ●子进程在运行时,先复制主进程的东西,然后分配内存进行运作,在运行过程中,代码不变,数据改变,且代码只有一份,代码不复制,代码为共享(写时拷贝)
###2.3进线程的对比 功能 ●进程:能够完成多任务,如:手机应用多开或在一台电脑上能同时运行多个QQ ●线程:能够完成多任务,如:QQ中的多个聊天窗口 进程是代码和资源的总称,是资源分配的单为、总和 线程拿进程分配的资源去执行 多线程能实现多任务是指在一个进程资源里有多个箭头在执行代码 多进程的多任务——有多个资源,每个资源里有一个箭头执行
区别:多线程只有一份资源,多进程有多份资源,真正在执行的时候所谓线程,资源分入的单位是进程。 理解:进程相当于总管手,多个进程相当于多个总管,总管分配任务资源给干活的人,线程相当于一个总管下多个干活的人,这些人共享总管给的资源,各个总管间的资源却是私有的,不共享,总管的收益相当于农民生产完成后所归还的利息。线程资源很少就能实现多任务,进程要很多资源(相对于线程)才能实现多任务 ●优缺点:线程和进程在使用上各有优点:线程执行开销小但不利于资源的管理和保护;进程相反 ●线程不能独立进行执行,必须依存在进程中 ●相当于线程寄生在进程中
###2.4进程间的通信-Queue队列 说明:Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信 Queue在multiprocessing中,用Queue的目的是解耦,耦合度越高程序越不好。耦合度 = 相关度 特点:先进先出,与栈相反 栈:先进后出
###2.5进程池Pool 1.进程池的概念 python中,进程池内部会维护一个进程序列。当需要时,程序会去进程池中获取一个进程。
如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止。
2.进程池的内置方法 ●apply 从进程池里取一个进程并同步执行 ●apply_async 从进程池里取出一个进程并异步执行 ●terminate 立刻关闭进程池 ●join 主进程等待所有子进程执行完毕,必须在close或terminete之后 ●close 等待所有进程结束才关闭线程池
同步是指一个进程在执行某个请求的时候,必须要到收到对方返回的信息才继续执行下去
异步是指进程在执行某个请求时,不管其他的进程的状态,这个进程就执行后续操作; 当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法
初始化Pool时,可以指定一- 个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值, 那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务。
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一只小可乐! |