PYTHON-进程 子进程

并发编程    学习目标: 见35复习一、操做系统       什么是操做系统       操做系统的两大做用:       批处理操做系统:   操做系统发展史:      多道技术*****        产生背景:        两大核心点:      应用软件的优化的核心:*****二、进程    一、进程理论(*****)        一、进程与程序区别        二、并发,并行,串行是什么        三、不一样操做系统开启子进程的区别        四、一个进程的三种运行状态    二、开启进程的两种方式(*****)    3.多进程的执行顺序 ******    四、进程对象的经常使用属性    5 僵尸进程和孤儿进程(了解)**    六、守护进程(**) 见36复习    七、互斥锁与信号量(**)        是什么        为何使用        互斥锁与join的区别:        如何使用        注意强调点        Semaphore信号量(了解)    八、IPC机制:队列,管道(*)      三种方式    九、进程queue=管道+锁 (***)    十、生产者消费者模型(*****) 见37复习        一、什么是生产者消费者模型?        二、什么用生产者消费者模型?        三、为何要用生产者消费者模型?好处?        四、如何实现?        总结点三、线程      一、线程理论(*****)见37复习          一、是什么          二、线程vs进程      二、开启线程的两种方式(*****)      三、守护线程(**)      四、互斥锁与信号量(**)见38复习      五、GIL vs 互斥锁(*****)          一、什么是GIL          二、GIL的影响          三、GIL的优缺点:          四、GIL vs 互斥锁        6 Cpython的解释器下*****      七、死锁现象与递归锁(**)      八、线程queue(***)      九、Event事件(**)四、池(*****)见38复习    是什么    为什么要用池:    何时用池:    如何用池?    总结点五、单线程下实现并发(***) 见39复习    1 同步调用 异步调用+回调机制        提交任务的两种方式:        什么是同步异步        任务执行的三种状态:         同步调用vs阻塞,两种不一样的'等'的效果        异步回调  ******            什么是异步回调?            为何须要回调?(好比 烧水壶,水烧开后 水壶会发出响声)            注意点:            回调函数何时被执行?            谁在执行回调函数?            线程的异步回调    2.线程队列 **        队列        堆栈        优先级队列    三、单线程下实现并发(***)            什么是协程                并发                并发实现的本质=切换+保存状态(两类切换)            高性能分析:            为何须要协程            如何实现协程(三种)            协程的应用场景:            总结点:六、网络IO模型(主要掌握理论***) 见40复习    网络传输中的两个阶段    1.阻塞IO    2.非阻塞IO    3.多路复用    4.异步IOsockserver---------------------------------------------------并发编程    学习目标:让服务器可以支持高并发+高性能一、什么是操做系统        操做系统是位于计算机硬件与应用软件之间        用于协调、控制、管理计算机硬件与软件的资源的一种控制程序   操做系统的两大做用:    一、把复杂丑陋的硬件操做都封装成美丽的接口,提供给应用程序使用    二、把进程对硬件的竞争变的有序  操做系统发展史:    第一代计算机 程序是固定 没法修改 某种计算机只能干某种活    第二代计算机 批处理系统 须要人工参与 将程序攒成一批 统一执行                串行执行 提升计算机的利用率 可是调试麻烦       批处理操做系统:(串行)            把程序员的程序攒成一堆            而后批处理系统读一道程序到内存而后执行            执行完毕后输出,而后才能读入下一道程序。。。    第三代计算机 为了更好利用计算机资源 ,产生了多道技术  多道技术*****    产生背景:在单核背景下实现多个进程并发执行的效果    两大核心点:    一、空间上的复用 (多道程序复用内存的空间)        内存分割为多个区域 每一个区域存储不一样的应用程序        内存中同时读入多道程序,多道程序的内存空间是物理隔离的    二、时间上的复用  (多道程序复用CPU时间)        切换+保存状态        1 正在执行的进程遇到IO操做时 会切换到其它程序            能够提升效率        2 运行时间过长 或者有一个优先级更高的进程抢走了CPU            反而会下降效率        (固然由于cpu速度贼快 用户感受不到)!!!!!应用软件的优化:最核心的优化就是减小IO操做,减小对硬盘的读写操做二、进程    一、进程理论(*****)        进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。       举例(单核+多道,实现多个进程的并发执行):        egon在一个时间段内有不少任务要作:python备课的任务,写书的任务,交女友的任务,王者荣耀上分的任务,          但egon同一时刻只能作一个任务(cpu同一时间只能干一个活),如何才能玩出多个任务并发执行的效果?        egon备一会课,再去跟李杰的女友聊聊天,再去打一会王者荣耀....这就保证了每一个任务都在进行中.     进程与程序区别        程序说白了就是一堆文件        进程就是一个正在执行的过程/程序 是一个资源单位        二、并发与并行        并发:看起来同时运行,实际上 不一样任务间来回切换            单核就能够实现并发,可是单核没法实现并行        并行:真正意义上的同时运行,一个cpu同一时刻只能作一件事            只有多核才能同时作多件事,即并行的效果        串行:按照固定的顺序一个个地执行(第一个任务没执行完 第二个只能等待)        三、不一样操做系统开启子进程的区别            windows-CreateProcess            unix-fork            都会拷贝父进程的状态,            区别点是unix系统fork拷贝的子进程的初始状态和父进程如出一辙.            进程的终止            windows-ExitProcess            unix-exit        四、一个进程的三种运行状态            运行态(正在执行)-            阻塞态(遇到IO)-            就绪态(运行时间过长/有优先级更高的抢走CPU)            只有运行态和就绪态能够来回切换            阻塞态切换到运行态时 须要通过就绪态    二、开启进程的两种方式(*****)        1.直接实例化Process这个类 参数target中传入任务函数        2.继承Process类 实现run函数       方式一:        from multiprocessing import Process        import os,time        def task(name):            print('%s is running' %os.getpad())        if __name__ == '__main__':            obj=Process(taget=task,args=('egon',))            obj.start() # 发送信号给操做系统            print('主')       方式二:        from multiprocessing import Process        import os,time        class Work(Process):            def run(self):                print('%s is ruuning' %self.pid)                time.sleep(3)        if __name__ == '__main__':            obj=Work()            obj.start() # 发送信号给操做系统            print('主')    (启动进程的方式        1.系统初始化 会产生一个根进程        2.用户的交互请求 鼠标双击某个程序        3.在一个进程中 发起了系统调用启动了另外一个进程 ******        4.批处理做业开始 某些专用计算机可能还在使用)    3.多进程的执行顺序 ******        主进程必然先执行        子进程应该在主进程执行后执行        一旦子进程启动了 后续的顺序就没法控制了    四、进程对象的经常使用属性        obj.start() 开启进程        obj.join(1) 父进程等待子进程        obj.terminate() 终止进程        obj.is_alive()  是否存活        obj.pid  获取进程id        obj.name 进程名称        "我是主程序个人pid:%s 个人父进程是:%s" % (os.getpid(),os.getppid())        "我有一个儿子是 %s" % obj.pid    5 僵尸进程和孤儿进程(了解)**        僵尸进程:有害            一个子进程任务执行完就死亡了 可是操做系统不会当即将其清理            为的是 开启这个子进程的父进程能够访问到这个子进程的信息(如PID)            这样已完成任务的 可是没有被操做系统清理的进程称为僵尸进程            直到父进程结束后发起调用回收子进程(减小PID占用),僵尸进程越少越好        孤儿进程:无害!            没有爹的称为孤儿            一个父进程已经死亡 然而他的子孙进程还在执行着  这时候操做系统会接管这些孤儿进程
相关文章
相关标签/搜索