• 并发编程(1)


    1. 了解

    # 进程:进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。
    
    # 将应用程序对硬件资源的静态请求变得有序化
    '''
    串行:一个完完整整的执行完了再执行下一个
    并发:看起来是同时运行的
    并行:真正做到了同时运行
    
    多道技术(了解):
        空间复用:共用一个内存条,每一个进程都有自己独立的内存空间,互不干扰,物理级别的隔离
        时间复用:共用一个CPU
    
    CPU切换(掌握)
        io的时候,占用时间过长切换
    
    '''
    
    # 现代计算机:
    '''
    现在的主机一般是多核,那么每个核都会利用多道技术
    有4个CPU,运行于CPU1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个
    CPU中的任意一个,具体由操作系统调度算法决定
    '''
    # 并发:切换+保存状态
    
    # 坑
    # 开启子进程:把父进程的代码完整复制到一个新的内存空间里去执行
    x = 1
    def task():
        print(x)
    
    

    2. 开启子进程的方式一

    # multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。
    
    from multiprocessing import Process
    import time
    
    def task():
        print('进程 start')
        time.sleep(2)
        print('进程 end')
    
    if __name__ == '__main__':   # 在windows中Process()必须放到if name == 'main':下
        p = Process(target=task)
        p.start()   # 告诉操作系统我要开子进程,告诉完了这行代码就算执行完了,接着往下走,具体操作系统什么时候开子进程,开多长时间跟你没关系
        time.sleep(5)
        print('主进程/父进程')
    
    
    # 开启多个子进程
    from multiprocessing import Process
    import time
    
    def task(x):    # 需要使用关键字的方式来指定参数
        print(f'子进程{x} start')
        time.sleep(2)
        print(f'子进程{x} end')
    
    if __name__ == '__main__':
        p = Process(target=task,args=('rocky',))  # 实例化得到的对象,表示一个子进程中的任务(尚未启动)
        p2 = Process(target=task,args=('nick',))  # args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号
        p.start()
        p2.start()
        time.sleep(5)
        print('主进程')
    

    3. 开启子进程的方式二

    from multiprocessing import Process
    import time
    
    class Test(Process):
        def __init__(self,name):  # 如果不传参没必要重写init
            super().__init__()
            self.name = name
    
        def run(self):
            print(f'子进程{self.name} start')
            time.sleep(2)
            print('子进程 end')
    
    if __name__ == '__main__':
        p = Test('ys')
        p.start()  # 向操作系统发送开启子进程的请求
        print('主进程')
    

    4. 验证进程的内存空间隔离

    from multiprocessing import Process
    import time
    
    x = 0
    def task():
        global x     # 子进程修改的是自己的名称空间里的x,与主进程无关。
        x = 100
        print(f'子进程的x修改为了{x}')
    
    if __name__ == '__main__':
        p = Process(target=task)
        p.start()
        time.sleep(5)
        print(x)
    

    5. 测试

    from multiprocessing import Process
    import time
    
    def task():
        print('进程 start')
        time.sleep(2)
        print('进程 end')
    
    if __name__ == '__main__':
        p = Process(target=task)
        p2 = Process(target=task)
        p.start()
        p2.start()
        print('主进程')
    
    '主进程在等待所有的子进程结束'
    
  • 相关阅读:
    关于flash在html的引用 ——OBJECT EMBED
    JS的trim()方法
    JavaScript语言精粹》(JavaScript: The Good Parts) 中文版PDF
    swfobject.js 详细解说
    百度文库功能的实现
    能说明你的Javascript技术很烂的五个原因zz
    Aptana3 使用不完全指南
    js高级功能与高级需求、高级期待
    js思维导图
    AspectCore使用 属性注入FromServiceContext
  • 原文地址:https://www.cnblogs.com/yushan1/p/11506842.html
Copyright © 2020-2023  润新知