zoukankan      html  css  js  c++  java
  • day33

    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('主进程')

    '主进程在等待所有的子进程结束'

  • 相关阅读:
    【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
    【模拟题(63550802...)】解题报告【贪心】【拓扑排序】【找规律】【树相关】
    【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
    IMemoryBufferReference and IMemoryBufferByteAccess
    SoftwareBitmap and BitmapEncoder in Windows.Graphics.Imaging Namespace
    Windows UPnP APIs
    编译Android技术总结
    Windows函数转发器
    Two Ways in Delphi to Get IP Address on Android
    Delphi Call getifaddrs and freeifaddrs on Android
  • 原文地址:https://www.cnblogs.com/bjlxxbj/p/11515061.html
Copyright © 2011-2022 走看看