Java開源:traffic-shm-Java 版異步無鎖共享內存實現

AmosStrothe 7年前發布 | 20K 次閱讀 Java 共享內存 Java開發

介紹

traffic-shm(Shared Memory)是一個基于Java的無鎖消息庫,專為在同一臺服務器上的進程間通信(IPC)而設計。

特征

1. Pure Java

共享內存是進程間通信的有效機制。 內存映射文件提供動態內存管理功能,允許應用程序以與將虛擬地址空間的物理內存共享段相同的方式訪問磁盤上的文件。

traffic-shm使用sun.misc.Unsafe和FileChannel提供純Java實現,需要JDK 1.6+。

2. Lock-Free

使用非阻塞算法,實現多生產者/單消費者并發隊列,traffic-shm可用于構建具有高吞吐量和低延遲的實時系統。

3. Cross-Platform

對齊:4字節對齊

byteorder:big-endian

支持大多數主要操作系統,如Linux,macOS,Windows,AIX和HP-UX。

注意:在HP-UX上設置-Xmpas:

4. Message Ordering

traffic-shm提供一個一鍵保證的FIFO隊列。

光標只能向前傳送,一旦消息成功傳遞,消息就是AUTOMATIC ACKNOWLEDGMENT,這意味著一旦接收者接收到消息,就會確認消息。

設計

入門

讀:

Queue queue = Queue.map("/Users/peptos/shm", 2000L, 1, 0);
queue.init();

while (true) {
    Block block = queue.poll();
    if (block != null) {
        System.out.println(new String(block.getPayload(), "UTF-8"));
    } else {
        Util.pause(10);
    }
}

寫:

Queue queue = Queue.map("/Users/peptos/shm", 2000L, 1, 0);

String string = "hello, world";
byte[] bytes = string.getBytes("UTF-8");
System.out.println(queue.put(new Block(bytes)));

queue.close();

TODO

  • extend mode

reference: Mycat-IPC

 

項目主頁:http://www.baiduhome.net/lib/view/home/1494897978750

 本文由用戶 AmosStrothe 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!