Java开源:traffic-shm-Java 版异步无锁共享内存实现
AmosStrothe
7年前
<p style="text-align:center"><img src="https://simg.open-open.com/show/d02f31a448784120a6e1ef34723740c4.png"></p> <h2>介绍</h2> <p>traffic-shm(Shared Memory)是一个基于Java的无锁消息库,专为在同一台服务器上的进程间通信(IPC)而设计。</p> <h2>特征</h2> <h3>1. Pure Java</h3> <p>共享内存是进程间通信的有效机制。 内存映射文件提供动态内存管理功能,允许应用程序以与将虚拟地址空间的物理内存共享段相同的方式访问磁盘上的文件。</p> <p>traffic-shm使用sun.misc.Unsafe和FileChannel提供纯Java实现,需要JDK 1.6+。</p> <h3>2. Lock-Free</h3> <p>使用非阻塞算法,实现多生产者/单消费者并发队列,traffic-shm可用于构建具有高吞吐量和低延迟的实时系统。</p> <h3>3. Cross-Platform</h3> <p>对齐:4字节对齐</p> <p>byteorder:big-endian</p> <p>支持大多数主要操作系统,如Linux,macOS,Windows,AIX和HP-UX。</p> <p>注意:在HP-UX上设置-Xmpas:</p> <h3>4. Message Ordering</h3> <p>traffic-shm提供一个一键保证的FIFO队列。</p> <p>光标只能向前传送,一旦消息成功传递,消息就是AUTOMATIC ACKNOWLEDGMENT,这意味着一旦接收者接收到消息,就会确认消息。</p> <h2>设计</h2> <p><img src="https://simg.open-open.com/show/dcb369514ae45741239b48be5c0055e9.png"></p> <h2>入门</h2> <p>读:</p> <pre> <code class="language-java">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); } }</code></pre> <p>写:</p> <pre> <code class="language-java">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();</code></pre> <h2>TODO</h2> <ul> <li>extend mode</li> </ul> <p>reference: <a href="/misc/goto?guid=4959748777790894659" rel="nofollow,noindex">Mycat-IPC</a></p> <p> </p> <p>项目主页:<a href="http://www.open-open.com/lib/view/home/1494897978750">http://www.open-open.com/lib/view/home/1494897978750</a></p>