通过/dev/shm执行Java IPC的正确方式是什么(具有尽可能低的延迟)
原学程将引见经由过程/dev/shm履行Java IPC的准确方法是甚么(具备尽量矮的延早)的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。
成绩描写
我正在测验考试经由过程/dev/shm
编辑IPC处理计划。
@SK-logic在这里的批评中给了我1些指导:Chronicle: How to optimize memory-mapped files for low-latency?
我的疑问是:我应当应用MappedByteBuffer
照样只应用通俗的FileChannel
?
经由过程MappedByteBuffer
,我不妨应用sun.misc.Unsafe
并不妨直交拜访内存。这很棒,由于Unsafe
供给了像getLongVolatile
(除getLong
)以及putLongVolatile
(除putLong
)如许的办法。假如我应用通俗的FileChannel
,这能够吗?怎样防止从FileChannel
读与FileChannel
从CPU慢存中读与慢存数据?关于/dev/shm
中的易掉性读写,我能否必需在操纵体系中设置装备摆设某些实质?甚么?那边?怎样?:)
经由过程/dev/shm
履行Java IPC的准确方法是甚么?通俗文件频讲?MappdByteBuffer?
上面我怎样经由过程sun.misc.Unsafe
夺取指向内存的指针:
try {
this.raf = new RandomAccessFile(file, "rw");
this.fileChannel = raf.getChannel();
this.mappedBuffer = this.fileChannel.map(MapMode.READ_WRITE, 0, size);
} catch (Exception e) {
throw new RuntimeException("Could not 妹妹ap file to memory: " + filename + " " + size, e);
}
try {
addressField = Buffer.class.getDeclaredField("address");
addressField.setAccessible(true);
this.pointer = (long) addressField.get(this.mappedBuffer);
} catch(Exception e) {
throw new RuntimeException("Could not get off-heap pointer!", e);
}
推举谜底
汗青记载队伍应用Unsafe
对于堆以及直交内存停止线程平安内存拜访。
固然这是可言的,但是JVM其实不包管体系将怎样运转。我们在Intel X六四、AMD以及ARM处置器长进言尝试。
与其本身编辑一切这些实质,为何没有测验考试应用纪年史天图或者队伍去为您完成这些任务呢?
佳了闭于经由过程/dev/shm履行Java IPC的准确方法是甚么(具备尽量矮的延早)的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。