zoukankan      html  css  js  c++  java
  • 7.3.2

    # 1、开进程的开销远大于开线程
    # 2、同一进程内的多个线程共享该进程的地址空间
    # 3、查看pid
    1.开进程的开销远大于开线程 看以下实例
    import time
    from threading import Thread
    from multiprocessing import Process
    
    def running(name):
        print('%s running' %name)
        time.sleep(2)
        print('%s running end' %name)
    
    if __name__ == '__main__':
        p1=Process(target=running,args=('cmz',))
        p1.start()
    
        # t1=Thread(target=running,args=('cmz',))
        # t1.start()
        print('主线程')
    主线程
    cmz running
    cmz running end
    运行结果

    可以见在打印主线程代最后一行代码的时候,进程还没执行,p1.start ()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程

    import time
    from threading import Thread
    from multiprocessing import Process
    
    def running(name):
        print('%s running' %name)
        time.sleep(2)
        print('%s running end' %name)
    
    if __name__ == '__main__':
        # p1=Process(target=running,args=('cmz',))
        # p1.start()
    
        t1=Thread(target=running,args=('cmz',))
        t1.start()
        print('主线程')
    cmz running
    主线程
    cmz running end
    运行结果

    线程启动后直接打印,因为没有资源的申请。所以比进程要快。

    # 2、同一进程内的多个线程共享该进程的地址空间
    from threading import Thread
    from multiprocessing import Process
    
    n=100
    def task():
        global n
        n=0
    
    if __name__ == '__main__':
        p1=Process(target=task,)
        p1.start()
        p1.join()
    
        # t1=Thread(target=task,)
        # t1.start()
        # t1.join()
    
        print('主线程',n)
    主线程 100
    运行结果

    因为是进程之间是隔离的。所以是隔离的,子进程肯定也改了自己空间的n的值

    from threading import Thread
    from multiprocessing import Process
    
    n=100
    def task():
        global n
        n=0
    
    if __name__ == '__main__':
        # p1=Process(target=task,)
        # p1.start()
        # p1.join()
    
        t1=Thread(target=task,)
        t1.start()
        t1.join()
    
        print('主线程',n)
    主线程 0
    运行结果

    因为同一个进程下的多个线程是共享数据的。

    
    
    # 3、查看pid
    from threading import Thread
    from multiprocessing import Process,current_process
    import os
    
    def task():
        # print(current_process().pid)
        print('子进程PID:%s  父进程的PID:%s' %(os.getpid(),os.getppid()))
    
    if __name__ == '__main__':
        p1=Process(target=task,)
        p1.start()
    
        print('主线程',current_process().pid)
        print('主线程',os.getpid())
    主线程 4988
    主线程 4988
    子进程PID:7608  父进程的PID:4988
    运行结果
    from threading import Thread
    import os
    
    def task():
        print('子线程:%s' %(os.getpid()))
    
    if __name__ == '__main__':
        t1=Thread(target=task,)
        t1.start()
    
        print('主线程',os.getpid())
    子线程:948
    主线程 948
    运行结果

     子线程和主线程同属于一个主进程,



  • 相关阅读:
    Xcode4快速Doxygen文档注释 — 简明图文教程
    iOS6 旋转
    echart 判断数据是否为空
    echart tootip使用技巧
    下拉菜单自动向上或向下弹起
    前后台数据交互
    打包代码
    echart 设计宽度为百分比时,div撑不开
    无缝滚动(小鹏写)
    内置对象-Request对象
  • 原文地址:https://www.cnblogs.com/caimengzhi/p/8516634.html
Copyright © 2011-2022 走看看