python多线程优缺点_python25-多线程并发优缺点

本篇主要讲的是多线程并发优缺点,包括执行IO密集型任务和计算型密集任务时分别使用串行和并发来看CPU的使用效率。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!

01:问题引入

为何需要多线程?

要把100M数据写入磁盘,CPU计算的时间只需要0.01s,可是磁盘接受这100M数据却需要10s。

怎么办呢?有以下两种办法

第一种办法是CPU等着,也就是程序暂停执行后续代码,直到磁盘写入数据完成再继续往下执行

第二种办法是CPU告诉磁盘:“您老人家慢慢写,我去做别的事情了”

02:IO型密集任务

1)概述:指磁盘IO、网络IO占主要的任务,计算量很小。

2)特点:有大量的等待时间。CPU消耗很少,任务的大部分时间都在等待IO操作完成。

3)注意:在Python中可以利用sleep达到IO密集型任务的目的。

03:串行执行IO型密集任务

import time,threading

begin_time=time.time()

def foo(something):

print(something)

time.sleep(2)

#串行执行IO型密集任务

foo('磁盘接收100M数据')

foo('CPU执行其他任务!')

end_time=time.time()

#打印主线程运行时间

print('共计消耗时长为:',end_time-begin_time)#4s

04:多线程并发执行IO型密集任务

import time,threading

begin_time=time.time()

def foo(something):

print(something)

time.sleep(2)

#多线程并发执行IO型密集任务

t1=threading.Thread(target=foo,args=('磁盘接收100M数据',))

t2=threading.Thread(target=foo,args=('CPU执行其他任务!',))

t1.start()

t2.start()

t1.join()

t2.join()

end_time=time.time()

print('共计消耗时长为:',end_time-begin_time)#2s

05:多进程并发执行IO型密集任务

import time

from multiprocessing import Process

begin_time=time.time()

def foo(something):

print(something)

time.sleep(2)

#多进程并发执行IO型密集任务

if __name__ == '__main__':

t1=Process(target=foo,args=('磁盘接收100M数据',))

t2=Process(target=foo,args=('CPU执行其他任务!',))

t1.start()

t2.start()

t1.join()

t2.join()

end_time=time.time()

print('共计消耗时长为:',end_time-begin_time)#2.20212s

06:计算型密集任务

1)概述:指CPU计算占主要的任务,CPU一直处于满负荷状态。

2)特点:一直在执行没有等待时间。要进行大量的计算,消耗CPU资源。

07:串行执行计算型密集任务

import time,threading

begin_time=time.time()

def bar():

num=0

for i in range(100000000):

num+=1

#串行执行计算型密集任务

bar()

bar()

end_time=time.time()

print('共计消耗时长为:',end_time-begin_time)#14.5928s

08:多线程并发执行计算型密集任务

import time,threading

begin_time=time.time()

def bar():

num=0

for i in range(100000000):

num+=1

#多线程并发执行计算型密集任务

t1=threading.Thread(target=bar)

t2=threading.Thread(target=bar)

t1.start()

t2.start()

t1.join()

t2.join()

end_time=time.time()

print('共计消耗时长为:',end_time-begin_time)#14.3198s

09:多进程并发执行计算型密集任务

import time

from multiprocessing import Process

begin_time=time.time()

def bar():

num=0

for i in range(100000000):

num+=1

#多进程并发执行计算型密集任务

if __name__ == '__main__':

t1=Process(target=bar)

t2=Process(target=bar)

t1.start()

t2.start()

t1.join()

t2.join()

end_time=time.time()

print('共计消耗时长为:',end_time-begin_time)#9.6735s

10:总结

1)多线程并发优点:在执行IO密集型任务时,某个任务阻塞的时候CPU会切换到其他任务就大大提高了CPU的使用效率。

2)多线程并发缺点:在执行计算密集型任务时,CPU一直在计算没有休息。因此python多线程并发并不能显著提高效率,但是使用多进程执行效率有所提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值