??xml version="1.0" encoding="utf-8" standalone="yes"?> q些旉在开源方面看到NettyQ观察到Netty的重命名U程的策略类Q?/p> ThreadNameDeterminer。这个接口有两个{略Q一个是使用PROPOSEDQ徏议名UͼQ还有个是CURRENTQ当前名Uͼ 当前名称的策略是未实现的Q可能ؓ(f)以后扩展考虑吧?/p> 另外是ThreadRenamingRunnableq个c,q个c里面构建函C入Runnable接口Q和proposed名称?/p> ׃本nThreadRenamingRunnable也是实现RunnablecȝQ所以你在自׃务逻辑U还是照样实现Runnable接口来写逻辑Q完全对业务代码没有侵入?/p> 代码中大概是q样的情况:(x)
//Ҏ(gu)规则把线E名字进行修?/span>
try {
runnable.run(); // 调用传入接口的runҎ(gu)
} finally {
if (renamed)
// 恢复之前的名?/span>
}
}
只需要在构徏的你的Runnable的时候,重新包装一下即可:(x)
new ThreadRenamingRunnable(new OioWorker(acceptedChannel),
"Old I/O server worker (parentId: " + channel.getId() + ", " + channel + ')'));
q样的Decorator模式Q重新将Runnable接口q行?#8220;装饰”Q其具备了U程名称的功能?/p>
Runnable接口q是原来的接口,对runҎ(gu)的再ơ封装其具备了另外一功能,q就是Decorator模式的精华所在?/p>
cMq样的数?/p>
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 …
if ((n & -n) == n)
…
׃业务逻辑代码实在比较复杂Q此处o(h)掉业务代码把U程竞争关系展示出来Q?/p>
1U程———>获得A?#8212;——>获得B?#8212;——>释放B?#8212;———>释放A?/strong>
2U程———>获得A?#8212;——>释放A?/p>
3U程-——————>获得B?#8212;——>获得A?/strong>
问题出??U程之间的AB锁嵌套导致死锁问题,1U程在没有获得B锁的时候,3U程开始获得B锁然后又得到了A锁,q时候就完全释放不了A锁了Q死锁生了?/p>
׃旉关系Q问题是理清楚了Q只要删?U程的A锁就可以了,当时q是仔细了解q是否删?U程A锁,发现对业务A锁是没必要的。但是线E??x)不会(x)也会(x)像刚才一样生线E死锁呢Q不?x),因?f)U程2里ƈ不会(x)得到B锁?/p>
1U程———>获得B?#8212;——>释放B?/p>
2U程-——————————>获得A?#8212;———>释放A?/p>
3U程———>获得B?#8212;——>获得A?#8212;———>释放A?#8212;———>释放B?/p>
问题是死锁,但暴露了两部分问题:(x)
1.q早的认p控制好竞争关p,对线E间的竞争过早的做出了判?/p>
2.每多设计一个锁增加了一个竞争的因素Q尽量小心,一个锁有可能是一个地P一不小心就可能D严重的问题?/p>
?a >《javaq发~程实践?/a>q本书中介绍qLeftRightLockQ详l了解这个问题的朋友可以L下这本书?strong>W十?nbsp;避免z跃性危?/strong>
此书极其详细的介l了LeftRightLock出现的可能,有可能是因ؓ(f)自己~写E序的疏忽导_(d)或者由于对锁的认识不DQ诸多原因都能找到解释?/p>
Netty的一些理解,请参照:(x)
http://www.kafka0102.com/2010/06/167.html
http://rdc.taobao.com/team/jm/archives/423
Netty的高可靠性,可~性,以及(qing)效率的确让h着qPZ么Nettyq么快呢Q?/p>
Netty高效的原因:(x)
nio的实现ƈ不复杂,但想让你的底层通讯Q效率,以及(qing)可~性和高可靠性做好,q是极具挑战性的?/p>
目前有个目是自己写的nioQ但效率比vnetty来,了几个数量U,当然以本Z׃力能做到目前q个情况Q还自己满意,也用到生产环境中了,一个web gameQ及(qing)时性要求很高,一台serverQ?000人没问题。同时广播消息在10000Z内,当然有些优化是在业务逻辑层面的。当然比起netty的效率来讲还是差了几个数量?/p>
除了高效QNetty在扩展性方面做的不错:(x)
最后,ZNetty我简单封装了一个web game所具备的一些GameBufferQ目前比较简陋,后箋可能加入一些别的功能?/p>
目?https://github.com/cuixin/XGameEnginee/