我一直在对Chronicle队列进行一些性能测试,而且我没有在Chronicle声称我应该的微秒内获得延迟。我有一个单独的编写器和阅读器设置。编写器将当前时间写入队列,读取器读出队列并获取当前时间并进行差异以获得延迟。我这样做了一百万条消息,然后取平均值。
我作家的代码:
public class Client {
public static void main(String[] args) {
String path = "/dev/shm/queue";
SingleChronicleQueue queue = SingleChronicleQueueBuilder.binary(path).build();
ExcerptAppender appender = queue.acquireAppender();
Scanner read = new Scanner(System.in);
for (int i = 0;i<1;i++){
for (int j=0;j<1000000;j++) {
long time = System.nanoTime();
appender.writeText(Long.toString(time));
}
}
appender.writeText("end");
}
}
我的读者
public class Server {
public static void main(String[] args) {
String path = "/dev/shm/queue";
SingleChronicleQueue queue = SingleChronicleQueueBuilder.binary(path).build();
ExcerptTailer tailer = queue.createTailer();
DescriptiveStatistics results = new DescriptiveStatistics();
while (true) {
String text = tailer.readText();
if (text == null) {
Jvm.pause(10);
} else if (text.equals("end")) {
System.out.println("Results: " + results.getMean() / 1000);
break;
}
else {
long cur = System.nanoTime();
long recv = Long.parseLong(text);
long diff = cur - recv;
results.addValue(diff);
}
}
}
}
我在数十和几百毫秒的时间内得到延迟。能帮到我吗?我想我做的事情显然是错的。
答案 0 :(得分:1)
延迟很可能是真实的。如果您尽可能快地写作,则编写者可以在阅读器之前显示延迟越来越长,您运行测试的时间越长。大多数消息传递系统都有流量控制,这会降低生产者的速度,但这种影响会改变测试效果。 顺便说一下,你不是在为代码预热,尽管这不应该导致如此大的延迟。
我建议你试试