通过/dev/shm执行Java IPC的正确方式是什么(具有尽可能低的延迟)

原学程将引见经由过程/dev/shm履行Java IPC的准确方法是甚么(具备尽量矮的延早)的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

通过/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的准确方法是甚么(具备尽量矮的延早)的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。