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

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



  • 相关阅读:
    ubuntu samba 服务器设置
    Unable to find the ncurses libraries
    ubuntu 11.04 tftp 设置
    Ubuntu 11.04 NFS 配置
    Ubuntu server 网络设置
    ubuntu 11.04 tslib1.4 编译
    HGE DirectX9.0C版本修改已经完成,发图祝贺一下。
    HGE继续修改绘图底层
    D3D中的AGP内存、系统内存、显存的理解
    For循环和递归的一些区别。
  • 原文地址:https://www.cnblogs.com/caimengzhi/p/8516634.html
Copyright © 2011-2022 走看看