<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Disruptor 2.0更新摘要 馬丁最近發布了Disruptor的2.0版本,從我們開始將其開源以來發生了很多變化,現在是個時候推出一個正式的里程碑了。馬丁的博客上涵蓋了這次更新的所有內容,這篇文章的目的是嘗試把我以前的博文以新框架的架構轉述給大家,因為將它們都重寫一遍要耗費很多時間。現在我看到手工繪圖的缺點了。 在舊的版本中: ![](https://box.kancloud.cn/bd427c2b12467d63d5d0b6a9a555ea1b_640x360.png) 這是一個Disruptor的配置示例,具體上來說就是一個菱形的結構。如果你對此毫無感覺,可以回過頭復習下disruptor的細節。 對于2.0版的主要變化有3點: 1. 更貼切的命名; 2. 把producer barrier(生產者屏障)整合進了ring buffer; 3. 將Disruptor Wizard加入了主代碼庫。 新版本: ![](https://box.kancloud.cn/14608fc66533af40e9e3c457e1a9f9c4_640x221.png) 你可以看到基本原理還是類似的。新版本更加簡單,因為ProducerBarrier本身不再作為一個單獨的實體存在,它的替代者是PublishPort 接口,且RingBuffer自身就實現了這個接口。 類似地,DependencyBarrier替代ConsumerBarrier ,厘清了此對象的職責。另外,Publisher (Producer的替代者)和EventProcessor(替代了Consumer)也更能精確地體現出它們的行為。Consumer這個名字總是會帶來一些混淆,因為因為其實消費者從來不從ring buffer消費任何東西。Consumer之前僅僅是用于隊列實現的一個術語。 圖上沒有表現出來的變動是以前存在ring buffer里的東西叫entry(輸入條目),而現在改名叫Event(事件)了,相應的就是EventProcessor。 整個命名上的大規模更改是為了讓大家更清晰的明白Disruptor是如何工作的,以及該如何使用它。盡管我們把它用在事件處理上,但是當我們開源它的時候,還是希望它看起來可以更像一個通用的解決方案,所以命名慣例也傾向于表述這個事實。但是事件模型看起來確實更直觀一些,于是我們就改成這個命名了。 另外由于Wizard的引入,事件發布者和事件處理者之間的接駁更加簡單了。 現在如果你想建立一個菱形的Disruptor模式(例如FizzBuzz性能測試),一切變得優雅很多: ``` DisruptorWizard dw = new DisruptorWizard( ENTRY_FACTORY, RING_BUFFER_SIZE, EXECUTOR, ClaimStrategy.Option.SINGLE_THREADED, WaitStrategy.Option.YIELDING); FizzBuzzEventHandler fizzHandler = new FizzBuzzEventHandler(FIZZ); FizzBuzzEventHandler buzzHandler = new FizzBuzzEventHandler(BUZZ); FizzBuzzEventHandler fizzBuzzHandler = new FizzBuzzEventHandler(FIZZ_BUZZ); dw.handleEventsWith(fizzHandler, buzzHandler) .then(fizzBuzzHandler); RingBuffer ringBuffer = dw.start(); ``` [Wizard Wiki 傳送門](http://code.google.com/p/disruptor/wiki/DisruptorWizard) ### 其它變化:性能提升 馬丁在他博客提到過,他已經成功的提高了2.0版的性能。 在2.0版中還有一個閃耀的新成員Sequence(序列),它被用來搞緩存行填充,并消除了對內存屏障的需要。現在緩存行填充的做法和以前略有不同,因為JAVA7新的優化特性,它成功的“優化”掉了我們原來的技術方案。 那么就到這里吧,這篇博文我就是想給大家一個簡明的更新摘要,并且解釋我以前畫的圖為什么可能不再正確了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看