进程vs线程

Posted ledgua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程vs线程相关的知识,希望对你有一定的参考价值。

进程vs线程

进程vs线程创建速度

from threading import Thread
from multiprocessing import Process
import time

def task(name):
    print(f'name is running')
    time.sleep(2)
    print(f'name is end')


if __name__ == '__main__':
    t = Thread(target=task,args=('子线程',))
    p = Process(target=task,args=('子进程',))
    # t.start()
    p.start()
    print('主')

开启子线程的打印效果:

  • 子线程 is running

  • 主子线程 is end

开启子进程打印效果:

  • 主子进程 is running

  • 子进程 is end

进程和线程的创建速度

  • 开启子进程需要申请资源开辟空间
  • 开启子线程只是告诉操作系统一个执行方案

多线程vs多进程

计算密集型

from threading import Thread
from multiprocessing import Process
import time

# 计算密集型
# def work1():
#     res=0
#     for i in range(100000000): #1+8个0
#         res*=i
#
# if __name__ == '__main__':
#     t_list = []
#     start = time.time()
#     for i in range(4):
#         # t = Thread(target=work1)
#         t = Process(target=work1)
#         t_list.append(t)
#         t.start()
#     for t in t_list:
#         t.join()
#     end = time.time()
#     # print('多线程',end-start) # 多线程 15.413789510726929
#     print('多进程',end-start) # 多进程 4.711405515670776

IO密集型

# # io密集型
# def work1():
#     x = 1+1
#     time.sleep(5)
#
#
# if __name__ == '__main__':
#     t_list = []
#     start = time.time()
#     for i in range(4):
#         t = Thread(target=work1)
#         # t = Process(target=work1)
#         t_list.append(t)
#         t.start()
#     for t in t_list:
#         t.join()
#     end = time.time()
#     print('多线程',end-start) #  多线程 5.002625942230225
#     # print('多进程',end-start) # 多进程 5.660863399505615

以上是关于进程vs线程的主要内容,如果未能解决你的问题,请参考以下文章

进程vs线程

多线程总结之旅:线程VS进程

进程vs线程

Python 开启线程的2中方式,线程VS进程(守护线程互斥锁)

进程 vs. 线程

Python多进程vs多线程