注册 登录
编程论坛 Python论坛

新手求教:threading不节省时间,意义何在?

tulip95 发布于 2022-09-24 21:14, 904 次点击
为了学习threading,我制作了两组代码来对比效果(一组是四线程并发,另一组是按顺序一个一个执行):
代码1:
import threading
import time

def 玩(t):
    for j in range(100000):
        s=1.0;x=1.1
        for i in range(170):
            s=s*x
            x=x+1
    print(time.time()-t,'\t')

t1=time.time()
th1=threading.Thread(target=玩,args=(t1,))
th2=threading.Thread(target=玩,args=(t1,))
th3=threading.Thread(target=玩,args=(t1,))
th4=threading.Thread(target=玩,args=(t1,))
th1.start()
th2.start()
th3.start()
th4.start()

代码2:
import threading
import time

def 玩(t):
    for j in range(100000):
        s=1.0;x=1.1
        for i in range(170):
            s=s*x
            x=x+1
    print(time.time()-t,'\t')

t1=time.time()
玩(t1)
玩(t1)
玩(t1)
玩(t1)

结果1:
4.004648208618164
4.4277307987213135
5.130835771560669
5.193334579467773

结果2:
1.330603837966919
2.654576301574707
3.99839186668396
5.322086572647095

四线程并发与单线程执行的总用时差不多,这样的多线程有什么用?(我的cpu是四核心四线程)
2 回复
#2
外部三电铃2022-09-24 21:56
多线程对cpu密集计算不起作用,反而因为来回切换线程增加了cpu开销,甚至变得更慢

多线程不是用在这种地方的,用在网络相关的比较多,因为网络有很多不稳定性,比如网络爬虫,如果是单线程访问一个网址卡住了整个程序就卡住了,如果用多线程,一个线程卡住了其它线程不受影响
#3
tulip952022-09-25 12:14
受教了,非常感谢!
1