2012-07-27 68 views
3

我目前正在阅读/学习Erlang,并且经常指出它不适用于(大量数据处理)。现在我经常遇到这样的短语或类似短语,但从来不知道“重”究竟意味着什么。当提到'数字捣弄'时,密集程度如何密集?

如何确定操作是否是计算密集型的?测试前可以量化吗?

编辑:

在那里计算,算法的复杂度,或者输入值的大小的量之间的差。

例如1000 computaions of 28303/4 VS 100 computations of 239847982628763482/238742

+0

你为什么学习Erlang?机会是你正在学习1)学习一种功能性语言2)学习一种真正擅长并发性和稳定性的语言3)*不*制作游戏,强力密码或在其中进行物理模拟。所以没有真正的担心。但是除此之外,这是一个有趣的问题,所以+1对你来说,先生。 :) – 2012-07-27 16:00:51

+0

hei安德斯,我正在学习它,因为我一般都对'(1)感兴趣' - 我也尝试使用clojure和haskell,但对于erlang,它真的是'(2)'选项。 – beoliver 2012-07-27 16:05:48

回答

3

当你特别谈到二郎,我怀疑你一般想要开发需要大量的数字与它运算应用。那就是 - 你不会学习Erlang来编写一个物理引擎。所以不要担心Erlang对你来说太慢了。

从Erlang到一般的问题,这些事情总是归结为相对性。让我们忽略数字处理并询问关于编程的一般问题:速度有多快?

好,足够快取决于:

  • 你想用的应用程序做什么
  • 你希望多久做
  • 用户如何快速指望它发生

如果在某些程序中读取一个文件需要1ms或1000ms - 1000毫秒被认为是“太慢”?

如果十个文件具有快速连续读取 - 是的,也许太慢。想象一下,XML解析器只需1秒钟就可以从磁盘读取XML文件 - 太糟糕了!

如果在另一方面文件仅已被读取,当用户手动地点击一个按钮,每15分钟左右,然后它不是一个问题,例如在Microsoft Word中。

究竟谁没有说什么太慢是,是因为它并不重要。你的具体问题也是如此。一种语言应该很少,如果有的话,应该避免“慢”。

最后但并非最不重要的,如果你开发二郎一条可怕的项目,在路上,意识到dagnabbit!你真的需要紧缩这些数字 - 与小型图书馆,那么你做你的研究,找到好的库和实现语言算法最适合它,然后互操作。

+0

我绝对认为,多语种是在大型系统中走的路。所有的语言都有他们的甜点,在一个大系统中,不同的部分会有不同的要求,一种语言不可能是最好的。所以,@安德斯霍姆斯特罗姆建议,**必要时**找到一个好的图书馆和界面。 – rvirding 2012-07-27 16:44:08

2

我曾经问一个关于数字的问题在沙发上DB的MapReduce运算:CouchDB Views: How much processing is acceptable in map reduce?

什么有趣的答案之一是:

假设你有10,000个文件,并且每个文件需要1秒到 进程(这比我见过的要高)。那就是10,000 秒或2.8小时来完全构建视图。但是,一旦查看完成,查询任何行(?key = ...)或行分片 (?startkey = ... & endkey = ...)与直接查询 文档的时间相同。查找时间为文档计数O(log n)。

换句话说,即使这需要每个文档以执行 地图1秒,这将需要几毫秒来获取结果。 (当然, 视图必须先建,因为它实际上是一个指数。)

我想,如果你想在这些方面你目前的问题,它的一个有趣的角度去思考你的问题。关于语言速度/优化的主题:

如何确定操作是否计算密集?

Facebook问这个关于PHP的问题,最后写了HIP HOP来解决这个问题 - 它把PHP编译成C++。他们说之所以php比C++慢很多,是因为PHP语言全是动态查找,因此需要做大量的处理来完成任何与变量,数组,动态类型(这是减速的来源)等有关的操作。

所以,你可以问的问题是:是erlang动态查找?静态打字?编译?

有计算的量之间的差,该算法的复杂性 或输入值的大小。对于 例如1000个computaions的 238742分之239847982628763482

所以四分之二万八千三百零三VS 100计算,随着中说,事实上,你甚至可以授予特定类型的不同种类的数字意味着你应该使用正确的类型,这肯定会导致性能提升。

2

有了这样的事情,你会知道它,当你看到它!通常这是指当你选择一个int,float,double等时它很重要的情况。像物理模拟或蒙特卡罗方法那样的事情,你需要做数百万次的计算。

说实话,在现实中,你只需在C语言中编写这些位,并使用你最喜欢的其他语言来运行它们。

0

数字运算的适用性取决于图书馆的支持和语言的内在本质。例如,纯函数式语言不允许任何可变变量,这使得实现任何方程式解决类型问题变得非常有趣。 Erlang可能属于这一类。