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
    运行结果

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



  • 相关阅读:
    c语言一道题
    try,catch,finally尝试(一个程序块多个catch)
    利用接口及抽象类设计实现
    设计一个限制子类的访问的抽象类实例,要求在控制台输出如下结果
    多态,重写和重载
    织梦被挂了黑链的可能原因和排查清除办法
    织梦cms手机站首页不更新的解决办法
    dedecms织梦会员登录二级域名跨域不能获取数据的解决办法
    织梦cms添加新变量出现:Request var not allow!的解决办法
    织梦dedecms使用Mysql8.0无法登录后台的解决办法
  • 原文地址:https://www.cnblogs.com/caimengzhi/p/8516634.html
Copyright © 2011-2022 走看看