• 并发编程


    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
    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    ConcurrentHashMap get方法保持同步的解释
    HashMap resize导致死循环
    ConcurrentHashMap原理详解
    单列索引和联合索引区别
    优先队列
    大根堆排序
    小根堆排序
    基础哈夫曼树-最简单的
    二叉查找树
    二叉查找树
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10190909.html
Copyright © 2020-2023  润新知