我想为网站编写一个后端系统(它将是一个自定义搜索式服务).它需要高度并发和快速.考虑到我对并发的期望,我计划使用Haskell或Scala等函数式语言.
但是,速度也是一个优先事项.http://benchmarksgame.alioth.debian.org结果似乎表明Java几乎和C/C++一样快,Scala通常非常好,但对于大多数任务,Haskell的范围从慢到慢.
有没有人有任何性能基准/使用Haskell vs Scala vs Java执行高度并发任务的经验?
我见过的一些网站表明Scala有内存泄漏,这对于像这样的长期运行服务来说可能很糟糕.
在选择(性能和并发性是最高优先级)之前,我应该写什么服务,或者我应该考虑什么?
谢谢
在考虑用于分布式/并发/故障转移/可扩展后端环境的Java替代方案时,我发现了Erlang.我花了一些时间在书籍和文章上,其中几乎所有人(甚至是Java上瘾的人)都说Erlang在这样的环境中是更好的选择,因为许多有用的东西都是以不易出错的方式开箱即用的.
我确信Erlang在大多数情况下更快,主要是因为不同的垃圾收集策略(每个进程),缺少共享状态(黑白线程和进程)和更紧凑的数据类型.但是当我发现Erlang与Java数学样本的比较时,我感到非常惊讶,其中Erlang的速度慢了几个,例如从x10到x100.
即使是并发任务,也可以在几个核心和一个核心上完成.
这是什么原因?想到这些答案:
如果那是因为这些是非常具体的数学算法,那么任何人都可以展示更多真实/实践性能测试吗?
更新:到目前为止,我已经得到了答案,总结了Erlang不是这种特定"快速Java案例"的正确工具,但我不清楚这一点 - 这里Erlang效率低下的主要原因是什么:动态类型,GC还是可怜的原生编译?
我想将音频计算委托给C++层,但是通过WPF GUI处理和编辑音频内容.
我简要介绍了C++/CLI,我想知道:
编辑:随着火焰战可能开始.这是一个关于基准游戏的链接,它明确指出C/C++是速度获胜者.我在问:我应该在C++ Dll或C++ CLI程序集中编写C++.
我一直在寻找一些有趣的编程基准来看看与其他语言相比node.js的表现如何:http://benchmarksgame.alioth.debian.org/u32/compare.php?lang = node &lang2 = php
虽然结果主要涉及您通常希望使用C或Fortran变体解决的算法问题,但一个测试对于V8来说非常糟糕:
pidigits - 比PHP慢52倍
由于v8在所有其他测试中表现得比PHP更好,我认为代码有问题或某些特定于V8/Javascript的实现使得它执行得非常糟糕.它是什么?
代码1:V8
// The Computer Language Benchmarks Game
// http://shootout.alioth.debian.org
//
// Contributed by Matthew Wilson
// biginteger derived from Tom Wu's jsbn.js
var compareTo, multiply, divide, addTo, add, intValue, shiftLeft, nbv;
function main($n) {
var $i=1, $s="", $d, neg10=nbv(-10), three=nbv(3), ten=nbv(10), g = 1, $g,
digits=Array(10), $z0=nbv(1), $z1=nbv(0), $z2=nbv(1), negdigits=Array(10),
k = 0, $k, l = 2, $l, a;
for(var i=0; i<10; ++i) { negdigits[i] = multiply(digits[i] …
Run Code Online (Sandbox Code Playgroud) 我正在使用Go语言并发,发现了一些对我来说不透明的东西.
我写了并行矩阵乘法,也就是说,每个任务计算产品矩阵的单行,乘以源矩阵的相应行和列.
这是Java程序
public static double[][] parallelMultiply(int nthreads, final double[][] m1, final double[][] m2) {
final int n = m1.length, m = m1[0].length, l = m2[0].length;
assert m1[0].length == m2.length;
double[][] r = new double[n][];
ExecutorService e = Executors.newFixedThreadPool(nthreads);
List<Future<double[]>> results = new LinkedList<Future<double[]>>();
for (int ii = 0; ii < n; ++ii) {
final int i = ii;
Future<double[]> result = e.submit(new Callable<double[]>() {
public double[] call() throws Exception {
double[] row = new double[l];
for (int j = …
Run Code Online (Sandbox Code Playgroud) 计算机语言基准测试游戏对于Threadring的F#条目包含一条看似无用的行:if false then ()
.当我注释掉这一行时,程序运行得更快(对于50000000的输入,~2s vs~55s)并产生相同的结果.这是如何运作的?为什么这条线路在那里?编译器到底做了什么似乎是无操作?
代码:
let ringLength = 503
let cells = Array.zeroCreate ringLength
let threads = Array.zeroCreate ringLength
let answer = ref -1
let createWorker i =
let next = (i+1)%ringLength
async { let value = cells.[i]
if false then ()
match value with
| 0 -> answer := i+1
| _ ->
cells.[next] <- value - 1
return! threads.[next] }
[<EntryPoint>]
let main args =
cells.[0] <- if args.Length>0 then int …
Run Code Online (Sandbox Code Playgroud) 我和一个学生正在建立一个新的口译员家庭,我们希望以现有的口译员为基准.我们很乐意下载包含计算机语言基准游戏中使用的所有源代码的tarball或zip文件.我已经从项目页面下载了zip文件,但它只包含一些在Debian lenny上不起作用的基础结构,以及仅包含2个基准测试的Python源代码.所有其他源代码都是MIA.
另一个问题是交互式下拉菜单似乎显示Java源,无论要求什么语言.不是说我想要通过无数的菜单; 我只想要所有的来源.
由于无法找到此源代码,我觉得自己是个完全白痴,但我不能.谁能告诉我如何下载语言基准游戏中使用的所有源代码?
[NB我认为这个问题适用于SO,因为基准测试对于需要关注性能的程序员来说是一个至关重要的资源.
在语言枪战基准http://benchmarksgame.alioth.debian.org/表明FPC程序使用约1 /第50次的存储器的,使用克++使用比较的方案.难道这些基准无意青睐FPC或者是难道真的是FPC是这要比G ++好?我一直认为这些基准测试是一系列不错的微基准测试,所以我对这些结果感到惊讶,因为50倍是相当重要的恕我直言.
参考文献:
http://benchmarksgame.alioth.debian.org/u32/pascal.php http://benchmarksgame.alioth.debian.org/u64q/pascal.html
编辑: 这变得更加有趣,因为这个页面声称pascal只使用了8KB的一些程序,这看起来非常低
我曾参与过一些项目,其中实现更好的性能和减少内存消耗是主要目标。但是相信我,在 Java 中控制内存消耗已经很困难了。
这个wiki 页面上说“ Java 程序速度” ,在某些情况下,Java 在低级和数字基准测试中等同于 C++。
这些统计数据并没有真正显示时间计算性能基准的主要差异。但是,Java 中的内存使用量比 C++ 高得多,因为每个对象有 8 字节的开销,Java 中每个数组有 12 字节的开销(32 位;64 位 java 中的两倍),如中所述以上维基链接。
现在的问题是人们采取了哪些措施来最小化 Java 中的内存使用率?
请注意,我更关心内存而不是性能,因为我想不出比“编写更好的程序”和“在 JDK 中正确调整内存”更好的方法
performance ×5
java ×4
c++ ×2
memory ×2
benchmarking ×1
c++-cli ×1
compare ×1
erlang ×1
f# ×1
fpc ×1
freepascal ×1
g++ ×1
go ×1
haskell ×1
javascript ×1
jvm ×1
node.js ×1
python ×1
scala ×1
statistics ×1
v8 ×1