gil 在CPU密集型多线程和单线程执行效率对比

直接用单线程执行for循环,执行5次,计算执行的时间

import logging
import datetime

FORMAT = '%(threadName)s %(thread)d %(message)s'
logging.basicConfig(format=FORMAT, level=logging.INFO)

start = datetime.datetime.now()

def calc():
    sum = 0
    for _ in range(100000000):
        sum += 1

calc()
calc()
calc()
calc()
calc()

delta = (datetime.datetime.now() - start).total_seconds()
logging.info(delta)

用多线程的方式,同样的for循环,使用5个线程跑,统计执行的时间

import threading
import logging
import datetime

FORMAT = '%(threadName)s %(thread)d %(message)s'
logging.basicConfig(format=FORMAT, level=logging.INFO)

start = datetime.datetime.now()

def calc():
    sum = 0
    for _ in range(100000000000):
        sum += 1
lst = []
for i in range(5):
    t = threading.Thread(target=calc, )
    lst.append(t)
    t.start()

for i in lst:
    i.join()

delta = (datetime.datetime.now() - start).total_seconds()
logging.info(delta)

两个测试结果来看,在CPython中,对于CPU密集型而言,多线程没特别大的优势,和一个线程的执行时间相差不是特别大

转载于:https://blog.51cto.com/windchasereric/2353462

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值