看了IBM上关于轻便线程的内容,对其中轻便线程的效率问题有疑惑。

可爱的 Python:用 Python 生成器实现“轻便线程”:

http://www-900.ibm.com/developerWorks/cn/linux/sdk/python/charm-25/index.shtml

 

上面提到说:
结果表明,在直接循环的版本运行一次的时间内,轻便线程的版本运行了两次还多一点点 — 也就相当于在上面提到的机器上,轻便线程运行了不到 3 秒,而直接循环运行了超过 6 秒。显然,如果每个工作单元都相当于单个字符串方法调用的两倍、十倍或一百倍,那么所花费的线程开销比例就相应地更小了。

from __future__ import generatorsimport time

TIMES = 100000

def stringops():
    for n in xrange(TIMES):
        s = "Mary had a little lamb"
        s = s.upper()
        s = "Mary had a little lamb"
        s = s.lower()
        s = "Mary had a little lamb"
        s = s.replace('a','A')

def scheduler():
    for n in xrange(TIMES):
        for thread in threads: thread.next()

def upper():
    while1:
        s = "Mary had a little lamb"
        s = s.upper()
        yield None

def lower():
    while1:
        s = "Mary had a little lamb"
        s = s.lower()
        yield None

def replace():
    while1:
        s = "Mary had a little lamb"
        s = s.replace('a','A')
        yield None

if __name__=='__main__':
    start = time.clock()
    stringops()
    looptime = time.clock()-start
    print"LOOP TIME:", looptime

    global threads
    threads.append(upper())
    threads.append(lower())
    threads.append(replace())
    start = time.clock()
    scheduler()
    threadtime = time.clock()-start
    print"THREAD TIME:", threadtime

但是我的试验结果正好相反,轻便线程用了0.6m,而循环用了0.4m.加大TIMES参量后效果更明显.试验证实了我的怀疑,估计是作者或者翻译者写错了.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值