zoukankan      html  css  js  c++  java
  • 进程与线程的区别

    1、开进程的开销远大于开线程,开启进程需要单独申请内存空间

    from multiprocessing import Process
    from threading import Thread
    import time
    def piao(name):
        print("%s piaoing" % name)
        time.sleep(2)
        print("%s piao end" % name)
    if __name__ =="__main__":
        # p=Process(target=piao,args=("ya",))
        # p.start()
        t = Thread(target=piao, args=("ya",))
        t.start()
        print("The main is end.")

     2、同一进程内的多个线程共享进程地址空间,如子进程和父进程之间内存隔离

    from multiprocessing import Process
    n=100
    def task():
        global n
        n=0
    if __name__ =="__main__":
        p = Process(target=task,)
        p.start()
        p.join()
        print("The main.",n)

    线程公用进程内存

    from threading import Thread
    n=100
    def task():
        global n
        n=0
    if __name__ =="__main__":
        p = Thread(target=task,)
        p.start()
        p.join()
        print("The main.",n)

     

    3、看一下pid

    主进程和子进程id不一样

    import os
    from multiprocessing import Process,current_process
    def task():
        #print(current_process().pid)#查看当前进程id
        #也可以用os.getpid()方法
        print("子进程pid",os.getpid())
        print("父进程pid", os.getppid())
    if __name__ =="__main__":
        p = Process(target=task,)
        p.start()
        print("The main.",current_process().pid)

    线程中pid和主进程pid一样,因线程属于主进程

    from threading import Thread
    import os
    def task():
        print("‘子’线程pid",os.getpid())
    if __name__ =="__main__":
        p = Thread(target=task,)
        p.start()
        print("The main.",os.getpid())

     

  • 相关阅读:
    Revit 二次开发 几何
    Revit 二次开发 元素过滤练习
    Revit 二次开发 图元过滤
    Revit 二次开发 图元与参数
    扩展Revit的方式
    Revit API二次开发入门,完整学习流程,附源码
    Revit 二次开发学习视频
    在lldb调试中调用c++函数
    在lldb调试中调用c++函数
    lldb调试使用python脚本问题总结
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9038694.html
Copyright © 2011-2022 走看看