进程和线程对比

1,开进程的开销远远大于开线程

import time
from threading import Thread
from multiprocessing import Process

def piao(name):
    print('%s piaoing'%name)
    # time.sleep(1)
    print('%s piaoing end' % name)

if __name__=='__main__':
    start = time.time()
    p1 = Process(target=piao, args=('egon',))  # 创建了一个线程对象t1
    p1.start()  # 进程程花费时间:cost time 0.010999917984008789

    # t1=Thread(target=piao,args=('egon',))  #创建了一个线程对象t1
    # t1.start()  # 线程花费时间:cost time 0.0009999275207519531
    print('cost time %s'%(time.time()-start))

输出:

cost time 0.010999917984008789
egon piaoing
egon piaoing end

2,同一进程内的多个线程共享该进程的地址空间,不同进程彼此独立内存空间

from threading import Thread
from multiprocessing import Process
import time
n = 100
def task():
    global n
    n = 1
    print('子进程',n)

if __name__=='__main__':
    # p1 = Process(target=task,)  # 创建了一个进程对象t1
    # p1.start()
    '''
    进程输出:
    子进程 1
    主线程, 100
    ''''

    t1 = Thread(target=task,)  #创建了一个线程对象t1
    t1.start()  
    '''
    线程输出:
    子进程 1
    主线程, 1
    ''''
    time.sleep(1)
    print('主线程,',n)

3,瞅一瞅pid

from threading import Thread
from multiprocessing import Process,current_process
import os
def task():
    print('子进程或线程的pid::',current_process().pid)
    print('子进程或线程的pid>>',os.getpid(),'主进程',os.getppid())

if __name__=='__main__':
    p1 = Process(target=task,)  # 创建了一个进程对象t1
    p1.start()
    print('主进程pid=%s, OS得出的pid=%s, ppid=%s' % (current_process().pid, os.getpid(), os.getppid()))
    '''输出:
        主进程pid=7924, OS得出的pid=7924, ppid=6996
        子进程或线程的pid:: 6892
        子进程或线程的pid>> 6892 主进程 7924
    '''
    # t1=Thread(target=task,)  #创建了一个线程对象t1
    # t1.start()
    # print('主线程pid=%s, OS得出的pid=%s, ppid=%s'%(current_process().pid,os.getpid(),os.getppid()))
    '''输出:
        子进程或线程的pid:: 7712
        子进程或线程的pid>> 7712 主进程 6996
        主线程pid=7712, OS得出的pid=7712, ppid=6996
        '''
posted @ 2022-06-11 12:07  ty1539  阅读(24)  评论(0编辑  收藏  举报