??xml version="1.0" encoding="utf-8" standalone="yes"?>久久婷婷蜜乳一本欲蜜臀 ,色婷婷综合久久久久中文一区二区 ,亚洲人成在线观看网站高清http://www.aygfsteel.com/steven2012/category/51705.html专注&坚持zh-cnSun, 17 Jun 2012 00:58:49 GMTSun, 17 Jun 2012 00:58:49 GMT60U程重命名(NettyQ和设计模式Decoratorhttp://www.aygfsteel.com/steven2012/archive/2012/06/16/380935.htmlsteven.cuisteven.cuiSat, 16 Jun 2012 14:32:00 GMThttp://www.aygfsteel.com/steven2012/archive/2012/06/16/380935.htmlhttp://www.aygfsteel.com/steven2012/comments/380935.htmlhttp://www.aygfsteel.com/steven2012/archive/2012/06/16/380935.html#Feedback0http://www.aygfsteel.com/steven2012/comments/commentRss/380935.htmlhttp://www.aygfsteel.com/steven2012/services/trackbacks/380935.htmljava的多U程ThreadcL供了setNameҎ(gu)或者通过构造器传入nameQ来指定U程的名U?/p>

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)

public run() {
     //Ҏ(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>

steven.cui 2012-06-16 22:32 发表评论
]]>
判断一个数是否?的nơ幂http://www.aygfsteel.com/steven2012/archive/2012/06/16/380934.htmlsteven.cuisteven.cuiSat, 16 Jun 2012 14:26:00 GMThttp://www.aygfsteel.com/steven2012/archive/2012/06/16/380934.htmlhttp://www.aygfsteel.com/steven2012/comments/380934.htmlhttp://www.aygfsteel.com/steven2012/archive/2012/06/16/380934.html#Feedback0http://www.aygfsteel.com/steven2012/comments/commentRss/380934.htmlhttp://www.aygfsteel.com/steven2012/services/trackbacks/380934.html判断一个数是否?的nơ幂

cMq样的数?/p>

1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 …


if ((n & -n) == n)

1 public class Is2Power {
2      public static void main(String[] args) {
3           for (int i = 0;i <= 1024; i++) {
4                if ((i & -i) == i)
5                     System.out.println(Integer.toBinaryString(i) + ", " + Integer.toBinaryString(-i) + " " + i);
6           }
7      }
8 }



steven.cui 2012-06-16 22:26 发表评论
]]>
记录一个NonFairSync问题Q死锁问题)(LeftRighLock)http://www.aygfsteel.com/steven2012/archive/2012/06/16/380933.htmlsteven.cuisteven.cuiSat, 16 Jun 2012 14:22:00 GMThttp://www.aygfsteel.com/steven2012/archive/2012/06/16/380933.htmlhttp://www.aygfsteel.com/steven2012/comments/380933.htmlhttp://www.aygfsteel.com/steven2012/archive/2012/06/16/380933.html#Feedback0http://www.aygfsteel.com/steven2012/comments/commentRss/380933.htmlhttp://www.aygfsteel.com/steven2012/services/trackbacks/380933.html业务上线后,在有大量q发后,出现了一个线E完全被占用的问题,后来通过得到jvm堆栈信息(kill -3)看出来是死锁问题?/p>

׃业务逻辑代码实在比较复杂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>

steven.cui 2012-06-16 22:22 发表评论
]]>
Netty整理和基于Netty装了一个web game通讯?/title><link>http://www.aygfsteel.com/steven2012/archive/2012/05/15/378203.html</link><dc:creator>steven.cui</dc:creator><author>steven.cui</author><pubDate>Tue, 15 May 2012 09:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/steven2012/archive/2012/05/15/378203.html</guid><wfw:comment>http://www.aygfsteel.com/steven2012/comments/378203.html</wfw:comment><comments>http://www.aygfsteel.com/steven2012/archive/2012/05/15/378203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/steven2012/comments/commentRss/378203.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/steven2012/services/trackbacks/378203.html</trackback:ping><description><![CDATA[<p>NIO的理解,请参照:(x)<a >http://www.goldendoc.org/category/java-nio/</a></p> <p>Netty的一些理解,请参照:(x)</p> <p><a >http://www.kafka0102.com/2010/06/167.html</a></p> <p><a >http://rdc.taobao.com/team/jm/archives/423</a></p> <p><br /></p> <p>Netty的高可靠性,可׾~性,以及(qing)效率的确让h着qPZ么Nettyq么快呢Q?/p> <p>Netty高效的原因:(x)</p> <ol> <li>实现了多路Selector用于d注册Q线E数量是cpu*2Qreactor都是q么做的Q自己处理写事gQ这个我在自己框架中也是q么做的Qnio的selector处理注册和读Qƈ且也优化了wakeupQNetty中的wakeup也是优化q的Q本w一ơwakeup对Nioq不大,但是大批量ƈ发的时候就需要进行优化处理了Q只有当selector堵塞的时候进行wakeupQ或者说需要下ơ立刻返回的时候wakeup?/li> <li>Netty在开启多路读写的时候,用的是DirectBufferQƈ用了SoftReferrence来做~存优化Q减传输数据的内存Ud和GC。还有预数据算法,q个具体能不能提高有待讨?/li> <li>q发的控ӞZSEDA的设计理论构建的高效事g模型Q真正的异步处理Q吞吐量和׾~性都可以得到保证?/li> </ol> <p><br /></p> <p>nio的实现ƈ不复杂,但想让你的底层通讯Q效率,以及(qing)可׾~性和高可靠性做好,q是极具挑战性的?/p> <p><br /></p> <p>目前有个目是自己写的nioQ但效率比vnetty来,了几个数量U,当然以本Z׃力能做到目前q个情况Q还自己满意,也用到生产环境中了,一个web gameQ及(qing)时性要求很高,一台serverQ?000人没问题。同时广播消息在10000Z内,当然有些优化是在业务逻辑层面的。当然比起netty的效率来讲还是差了几个数量?/p> <p><br /></p> <p>除了高效QNetty在扩展性方面做的不错:(x)</p> <ol><li>丰富的decoder/encoder实现Q你可以L的承一个类实现自己的逻辑Q例如游戏中Q直接承FiledLengthBaseFrameDecoder卛_?/li> <li>自行ddecoder或者encoderQ自q控制事g向序Q通过q个Q可以实C些协议加密解密,协议qo(h)器,l计工具{等</li> <li>提供很多工具c:(x)Timeout的一些实玎ͼq有ChannelBuffers的一些工P通常情况下,我们Z减少对Netty的依赖,?x)自己再装一层,以完全达到脱Netty的目的,都会(x)再次装一层ChannelBufferQ这L(fng)的是不要让上层逻辑跟底层通讯有Q何关联,降低耦合Q当然也在ؓ(f)考虑更换底层通讯而不影响上层逻辑?/li> <li>提供监听底层消息的ChannelFutureQ例如发送完消息可以断开q接{等</li> <li>可调控的通讯架构Q可以根据业务的吞吐量来调整QNetty的各参C只有socket的一些设|,q能控制事g顺序和吞吐量的大小{等?/li> </ol> <p><br /></p> <p>最后,ZNetty我简单封装了一个web game所具备的一些GameBufferQ目前比较简陋,后箋可能加入一些别的功能?/p> <p><br /></p> <p>目?<a >https://github.com/cuixin/XGameEnginee/</a></p> <p><br /></p><img src ="http://www.aygfsteel.com/steven2012/aggbug/378203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/steven2012/" target="_blank">steven.cui</a> 2012-05-15 17:09 <a href="http://www.aygfsteel.com/steven2012/archive/2012/05/15/378203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ī</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">֯</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">dz</a>| <a href="http://" target="_blank">ݳ</a>| <a href="http://" target="_blank">ղ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǰ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʶ</a>| <a href="http://" target="_blank">ɽʡ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>