锁定老帖子 主题:2.7相比2.4的多线程性能提高了..
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-17
use coroutine....
|
|
返回顶楼 | |
发表时间: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 模式能不能用。 |
|
返回顶楼 | |
发表时间: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 我也担心效率,说不定有个平衡值,等我实测一把。 |
|
返回顶楼 | |
发表时间:2012-03-22
mathgl 写道 use coroutine....
是指stackless python吗? |
|
返回顶楼 | |
发表时间:2012-03-22
xdwdycdbs 写道 mathgl 写道 use coroutine....
是指stackless python吗? gevent,,,,,also works... |
|
返回顶楼 | |