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

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



  • 相关阅读:
    Android登录界面实现
    博客园自定义模板
    HttpClient + Jsoup模拟登录教务处并获取课表
    sublime编写markdown文件中Ctrl+B的作用
    Java学习路线图
    数学建模比赛论文的基本结构
    GitBash上传代码不计入贡献的问题处理
    Android知识体系图
    Java文件处理:分离全国省市县ID(数据来自和风天气)
    poj3484 Showstopper 二分
  • 原文地址:https://www.cnblogs.com/caimengzhi/p/8516634.html
Copyright © 2020-2023  润新知