以下是C++中的一个简单循环.计时器使用QueryPerformanceCounter()并且非常准确.我发现Java需要60%的时间用C++,这不可能是什么?!我在这做错了什么?即使是严格的别名(这里没有包含在代码中)也没有任何帮助......
long long var = 0;
std::array<int, 1024> arr;
int* arrPtr = arr.data();
CHighPrecisionTimer timer;
for(int i = 0; i < 1024; i++) arrPtr[i] = i;
timer.Start();
for(int i = 0; i < 1024 * 1024 * 10; i++){
for(int x = 0; x < 1024; x++){
var += arrPtr[x];
}
}
timer.Stop();
printf("Unrestricted: %lld us, Value = %lld\n", (Int64)timer.GetElapsed().GetMicros(), var);
Run Code Online (Sandbox Code Playgroud)
这个C++在大约9.5秒内完成.我正在使用英特尔编译器12.1与主机处理器优化(特别是我的)和一切最大化.所以这是英特尔编译器的最佳选择!自动并行化有趣地消耗70%的CPU而不是25%但是不能更快地完成工作;)...
现在我使用以下Java代码进行比较:
long var = 0;
int[] arr = new int[1024];
for(int i = 0; i < 1024; i++) …Run Code Online (Sandbox Code Playgroud) 关于Cassandra的
问题
为什么地球上的任何人都会用Java编写数据库ENGINE?
我可以理解为什么你想要一个Java接口,但引擎......
我的印象是没有什么比C/C++更快,并且数据库引擎不应该比最大速度慢,当然不使用垃圾收集......
任何人都能解释一下,为什么Cassandra可以比在C/C++代码上运行的普通SQL更快?
编辑:
对不起"为什么地球上的地狱"的一部分,但它对我来说真的没有任何意义.
我忽略了一个数据库,不像一般的花园变量用户程序,只需要启动一次,然后运行很长一段时间,也可能作为服务器上唯一的程序,这显然是一个重要的性能差异.
我更多地比较/引用了一个'不合适的'(温和地说)我在撰写本文时使用的Java税收计划(或者更愿意使用).
实际上,与将Java用于税务程序不同,使用Java编写专用服务器程序非常有意义.