介绍
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