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())

     

  • 相关阅读:
    Unity 之 中文乱码
    fork调用的底层实现
    Linux错误代码含义
    VMware 获取该虚拟机的所有权失败
    Qt ------ QAction
    C++ ------ const迭代器 和 const_iterator的区别
    IAR ------- 在线调试技巧
    STM32 ------ HardFault_Hander 中断函数
    从一张表中复制数据到另一张表中
    分布式任务调度平台xxl-job
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9038694.html
Copyright © 2011-2022 走看看