gil在密集型多线程和单线程执行效率对比是怎样的

这篇文章给大家介绍gil在密集型多线程和单线程执行效率对比是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联建站是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:成都网站设计、成都做网站、外贸网站建设、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。

直接用单线程执行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密集型而言,多线程没特别大的优势,和一个线程的执行时间相差不是特别大

关于gil在密集型多线程和单线程执行效率对比是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


文章名称:gil在密集型多线程和单线程执行效率对比是怎样的
文章网址:http://pwwzsj.com/article/gphpjg.html