国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

高性能的生產者-消費者新選擇:無鎖的緩存框架 Disruptor

姘擱『 / 1915人閱讀

    
        com.lmax
        disruptor
        3.3.4
    

public class PCData {

private long value;

public long getValue() {
    return value;
}

public void setValue(long value) {
    this.value = value;
}

}

public class PCDataFactory implements EventFactory {

@Override
public PCData newInstance() {
    return new PCData();
}

}

public class Producer {

private final RingBuffer ringBuffer;

public Producer(RingBuffer ringBuffer) {
    this.ringBuffer = ringBuffer;
}

public void pushData(ByteBuffer byteBuffer){
    long sequence = ringBuffer.next();
    try{
        PCData event = ringBuffer.get(sequence);
        event.setValue(byteBuffer.getLong(0));
    }finally {
        ringBuffer.publish(sequence);
    }
}

}

public class Consumer implements WorkHandler {

@Override
public void onEvent(PCData pcData) throws Exception {
    System.out.println(Thread.currentThread().getName()+"Event:--"+pcData.getValue()*pcData.getValue()+"--");
}

}

public class App {

public static void main(String[] args) throws InterruptedException {
    ExecutorService executorService = Executors.newCachedThreadPool();
    PCDataFactory factory = new PCDataFactory();

    int bufferSize = 1024;
    Disruptor dataDisruptor = new Disruptor(factory,bufferSize,executorService,
            ProducerType.MULTI,new BlockingWaitStrategy());
    dataDisruptor.handleEventsWithWorkerPool(
            new Consumer(),
            new Consumer(),
            new Consumer(),
            new Consumer()
    );

    dataDisruptor.start();

    RingBuffer ringBuffer = dataDisruptor.getRingBuffer();
    Producer producer = new Producer(ringBuffer);
    ByteBuffer byteBuffer = ByteBuffer.allocate(8);
    for(long l=0;true;l++){
        byteBuffer.putLong(0,l);
        producer.pushData(byteBuffer);
        Thread.sleep(100);
        System.out.println("add data"+l);
    }
}

}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74762.html

相關文章

  • Spring整合Disruptor3

    摘要:我們知道是一個隊列,生產者往隊列里發布一項事件或稱之為消息也可以時,消費者能獲得通知如果沒有事件時,消費者被堵塞,直到生產者發布了新的事件。實戰本文先不具體去闡述的工作具體原理,只是簡單地將與其整合。 什么是Disruptor 從功能上來看,Disruptor 是實現了隊列的功能,而且是一個有界隊列。那么它的應用場景自然就是生產者-消費者模型的應用場合了。可以拿 JDK 的 Block...

    khs1994 評論0 收藏0
  • 性能SPSC無鎖隊列設計之路

    摘要:當多線程修改互相獨立的變量時,如果這些變量共享同一個緩存行,就會無意中影響彼此的性能,這就是偽共享。 序 本文整理了Single Producer/Consumer lock free Queue step by step這篇文章里頭關于高性能的SPSC無鎖隊列使用遵循的幾個原則: 單寫原則 使用lazySet替代volatile set 使用位運算替代取模運算 避免偽共享 減少緩存...

    evin2016 評論0 收藏0
  • JAVA多線程使用場景和注意事項

    摘要:一個是線程退出條件,一個是異常處理情況。很方便,每個線程一份數據,也很安全,但要注意內存泄露。線程池參數包最常用的就是線程池,平常工作建議直接使用線程池,類就可以降低優先級了。在線程池的構造參數中,我們使用的隊列,一定要注意其特性和邊界。 我曾經對自己的小弟說,如果你實在搞不清楚什么時候用HashMap,什么時候用ConcurrentHashMap,那么就用后者,你的代碼bug會很少。...

    Joyven 評論0 收藏0
  • 追蹤解析 Disruptor 源碼

    摘要:分段策略嘗試自旋此,然后調用次,如果經過這兩百次的操作還未獲取到任務,就會嘗試階段性掛起自身線程。 零 前期準備 0 FBI WARNING 文章異常啰嗦且繞彎。 1 版本 Disruptor 版本 : Disruptor 3.4.2 IDE : idea 2018.3 JDK 版本 : OpenJDK 11.0.1 2 Disruptor 簡介 高性能線程間消息隊列框架 Disrup...

    LiangJ 評論0 收藏0
  • 一次生產 CPU 100% 排查優化實踐

    摘要:發現這是的一個堆棧,前段時間正好解決過一個由于隊列引起的一次強如也發生內存溢出沒想到又來一出。因此初步判斷為大量線程執行函數之后互相競爭導致使用率增高,而通過對堆棧發現是和使用有關。 showImg(https://segmentfault.com/img/remote/1460000017395756?w=1816&h=1080); 前言 到了年底果然都不太平,最近又收到了運維報警:...

    roundstones 評論0 收藏0

發表評論

0條評論

姘擱『

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<