论坛首页 编程语言技术论坛

2.7相比2.4的多线程性能提高了..

浏览 13134 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2012-03-17  
use coroutine....
0 请登录后投票
   发表时间:2012-03-21  
xdwdycdbs 写道
shenyu 写道
      
         if msgQueue.qsize()>0 and noResReportCount<100:
         noResReportCount+=1
         #in order that concurrent access
         if noResReportCount>100:
            noResReportCount-=1
            break      //外面有while循环,如果破坏了100条规则就直接退出
         print msgQueue.qsize()
         buffer=msgQueue.get().split(':')
         theSocket.sendall(encodeReport(buffer))


恐怕还是不行,假设当前noResReportCount = 90,10条线程都到执行 noResReportCount+=1的位置,10条轮换这执行noResReportCount+=1,结果 noResReportCount = 100,再往下进行一起轮换执行 if noResReportCount>100,结果都会命中,再往下去轮换执行noResReportCount-=1,减到90(这时已经晚了),最后一起退出。也就是说有可能达不到原来要求的最大限。100 - 线程数 = 你的消息条数,如果的线程数很大,就有可能一条都发不出去。

也是啊
是不是只有用锁把
        if noResReportCount>100:
            noResReportCount-=1
            break  

锁住了?


我也不是很清楚,用锁总归是可以的。不过效率也肯定会受到影响。对python的(线程)内存模型不是很清楚,也不知到double-checking-locking 模式能不能用。
0 请登录后投票
   发表时间:2012-03-22  
shenyu 写道
xdwdycdbs 写道
shenyu 写道
      
         if msgQueue.qsize()>0 and noResReportCount<100:
         noResReportCount+=1
         #in order that concurrent access
         if noResReportCount>100:
            noResReportCount-=1
            break      //外面有while循环,如果破坏了100条规则就直接退出
         print msgQueue.qsize()
         buffer=msgQueue.get().split(':')
         theSocket.sendall(encodeReport(buffer))


恐怕还是不行,假设当前noResReportCount = 90,10条线程都到执行 noResReportCount+=1的位置,10条轮换这执行noResReportCount+=1,结果 noResReportCount = 100,再往下进行一起轮换执行 if noResReportCount>100,结果都会命中,再往下去轮换执行noResReportCount-=1,减到90(这时已经晚了),最后一起退出。也就是说有可能达不到原来要求的最大限。100 - 线程数 = 你的消息条数,如果的线程数很大,就有可能一条都发不出去。

也是啊
是不是只有用锁把
        if noResReportCount>100:
            noResReportCount-=1
            break  

锁住了?


我也不是很清楚,用锁总归是可以的。不过效率也肯定会受到影响。对python的(线程)内存模型不是很清楚,也不知到double-checking-locking 模式能不能用。


3q
我也担心效率,说不定有个平衡值,等我实测一把。
0 请登录后投票
   发表时间:2012-03-22  
mathgl 写道
use coroutine....


是指stackless python吗?
0 请登录后投票
   发表时间:2012-03-22  
xdwdycdbs 写道
mathgl 写道
use coroutine....


是指stackless python吗?


gevent,,,,,also works...
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics