<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

        今年在閱讀某個項目源碼的時候看到DelayQueue的使用,xmemcached 1.2.6.1的重連任務也是采用DelayQueue管理,ReconnectRequest實現Delayed接口,我突然想起去review下xmc的源碼,發現一個嚴重的BUG,原始代碼如下:
    public final class ReconnectRequest implements Delayed {
          
    public long getDelay(TimeUnit unit) {
            
    return  nextReconnectTimestamp - System.currentTimeMillis();
        }
    }

        getDelay返回該任務還剩下多少時間可以被執行,將下次執行的時間戳減去當前時間即可,問題在于這里返回的是毫秒,而沒有調用getDelay傳入的TimeUnit做轉換,在DelayQueue內部其實是用納秒做單位交給Condition對象去等待
      for (;;) {
                    E first 
    = q.peek();
                    
    if (first == null) {
                        available.await();
                    } 
    else {
                        
    long delay =  first.getDelay(TimeUnit.NANOSECONDS);
                        
    if (delay > 0) {
                            
    long tl = available.awaitNanos(delay);
                        } 
    else {
                            E x 
    = q.poll();
                            
    assert x != null;
                            
    if (q.size() != 0)
                                available.signalAll(); 
    // wake up other takers
                            return x;

                        }
                    }
                }
      
         最終導致的問題是,awaitNanos很快返回(awaitNanos接受的是納秒,這里卻傳入毫秒),循環執行發現重新計算的delay仍然大于0,循環等到getDelay返回的越來越小直到0才執行相應的Task,,造成的現象是在重連的時候cpu占用率很高。

         單元測試的時候沒有發現這個問題,主要是因為功能正常,沒有關注資源消耗情況,因此慚愧地忽略了。

          解決的辦法很簡單,修改getDelay方法即可:
        public long getDelay(TimeUnit unit) {
            
    return unit.convert(
                    nextReconnectTimestamp 
    - System.currentTimeMillis(),
                    TimeUnit.MILLISECONDS);
        }

          這個BUG比較嚴重,已經升級1.2.6.1的朋友建議馬上升級到1.2.6.2,使用maven的朋友只要修改版本即可,沒有使用maven的請到這里下載。


    評論

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-23 15:27 by nmb
    粗心呀!

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-23 22:25 by nbm
    我使用maven構建項目,請問xmemcached放在google的maven倉庫地址是多少?

    還想問一下xmemcached的包組織結構為什么不是com.googlecode而是net.rubyeye.?
    和ruby語言有關嗎

    最后想知道像Clojure這類的腳本語言主要用在什么地方?

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-23 23:22 by nmb
    我使用maven構建項目,請問xmemcached放在google的maven倉庫地址是多少?
    這個我已經知道了。

    還想問一下,怎么樣把artifact提交到maven的中心倉庫?需要注冊什么的嗎?

    # re: xmemcached 1.2.6.2緊急發布(升級到1.2.6.1的朋友注意)  回復  更多評論   

    2010-10-25 09:51 by denniis
    @nmb
    xmc是放入maven中心倉庫的,怎么放入參考這個文檔
    https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-10.ReleaseIt
    主站蜘蛛池模板: 久久精品亚洲综合| 久久91亚洲精品中文字幕| 67194在线午夜亚洲| 91精品国产免费入口| 无码乱人伦一区二区亚洲| 久草福利资源网站免费| 亚洲国产一区国产亚洲| 男人进去女人爽免费视频国产| 亚洲精品国偷自产在线| a级午夜毛片免费一区二区| 亚洲日本在线播放| 亚洲电影中文字幕| 嫩草在线视频www免费观看| 国产精品亚洲综合专区片高清久久久 | 麻花传媒剧在线mv免费观看| 无码乱人伦一区二区亚洲| 久久久免费精品re6| 亚洲中文字幕久在线| 亚洲人成电影网站免费| 亚洲熟伦熟女专区hd高清| 热99re久久精品精品免费| 国产成人亚洲精品91专区高清| 亚洲第一页日韩专区| 久久精品成人免费看| 亚洲精品电影在线| 午夜影视在线免费观看| 日韩免费在线中文字幕| 婷婷久久久亚洲欧洲日产国码AV| 国产精品久久免费| 国产精品亚洲а∨无码播放麻豆 | 美女视频黄.免费网址| 最新亚洲卡一卡二卡三新区| 日韩a在线观看免费观看| 一级黄色免费大片| 日本亚洲欧洲免费天堂午夜看片女人员| 无人在线观看免费高清| 中日韩亚洲人成无码网站| 日韩精品亚洲专区在线观看| 91成人免费观看在线观看| 亚洲国产美女精品久久久久| 免费国产美女爽到喷出水来视频|