• 并发编程


    1.什么是并发编程?

    并发编程就是可以同时处理多个任务

    2.并发的基石是 多道技术

    什么是多道技术?

    多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用.

    空间复用:

    同一时间,内存中存储了多个应用程序

    不同应用程序之间的内存是相互独立的

    时间复用:

    当一个程序遇到IO操作时,会自动切换到其他应用程序,以此来提高CPU的利用率

    3.并发与并行

    什么是并发?

    并发就是多个事件同时发生,也称之为伪并行

    什么是并行?

    并行就是多个事件同时进行

    4.两种使用进程的方式
    1.直接创建process对象,指定target对象
    1 from multiprocessing import Process
    2 3 def task():
    4     print('this is 子进程')
    5 6 if __name__ == '__main__':
    7     p = Process(target=task)
    View Code
    2.继承process 覆盖run方法
     1 class MyProcess(Process):
     2  3     def __init__(self,url):
     4         self.url = url
     5         super().__init__()
     6  7     def run(self):
     8         print('文件下载地址',self.url)
     9 10 if __name__ == '__main__':
    11     p = MyProcess('www.baidu.com')
    12     p.start()
    View Code
    3.process的用法

    p.start() 调用系统,启动子进程

    p.terminate() 终止当前进程

    p.daemon() 守护进程

    5.join函数

    join函数的作用是提高优先级,使父进程等待子进程结束

    from multiprocessing import Process
    import time
    ​
    def task(num):
        print('这是%s号进程' % num)
        time.sleep(2)
        
    if __name__ == '__main__':
        start_time = time.time()
        ps = []
        for i in range(5):
            p = Process(target=task,args=(i,))
            p.start()
            ps.append(p)
    ​
        for p in ps:
            p.join()
    ​
        print(time.time() - start_time)
    ​
        print('over')
    View Code

    6.孤儿进程与僵尸进程

    孤儿进程

    孤儿进程是指父进程已经终止,但是子进程还在运行

    孤儿进程是无害的,会总动过继给操作系统,由操作系统进行资源回收

    僵尸进程

    僵尸进程是指子进程执行完成所有任务,已经终止.但是还残留一些信息(进程ID 进程名称)

    父进程没有去处理这些残留信息,导致残留信息会占用系统资源,

    僵尸进程是有害的

    当出现大量的僵尸进程时 会占用系统资源 可以把它父进程杀掉 僵尸就成了孤儿 操作系统会

    负责回收数据

     1 import  time
     2 from multiprocessing import  Process
     3  4 def task1():
     5     print("子进程 run")
     6  7 if __name__ == '__main__':
     8     for i in range(10):
     9         p = Process(target=task1)
    10         p.start()
    11 12     time.sleep(100000)
    13 14 # 可以通过cmd 命令窗口使用taskkill + 进程ID的方式结束父进程
    15 # 也可以通过任务管理器结束父进程
    View Code
    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    CodeForces 706C Hard problem
    CodeForces 706A Beru-taxi
    CodeForces 706B Interesting drink
    CodeForces 706E Working routine
    CodeForces 706D Vasiliy's Multiset
    CodeForces 703B Mishka and trip
    CodeForces 703C Chris and Road
    POJ 1835 宇航员
    HDU 4907 Task schedule
    HDU 4911 Inversion
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10190909.html
Copyright © 2020-2023  润新知