> Erlang会比Java简单多少(如果有的话)?
我在这里假设Java将从shootout benchmarks在网上更快(Erlang不这样做).那么,我需要多少个cpu来使Erlang能够在单线程Java上发光(在下面给出的特定情况下)?
>在阅读关于Erlang一段时间之后,我遇到了一些评论/帖子,说大多数大型Erlang系统包含大量的C/C++.
这是为了速度的原因(我的假设)还是别的什么?为什么要这样?
我已经阅读了大多数机器上的处理器数量,线程模式很难(我同意),但是我正在寻找何时将“线路”跨越,以便我可以在右边更改语言/范例时间.
一点背景/背景:
我在服务器端工作在Java服务上,这些服务非常cpu限制并且容易并行.这通常是通过一次传入的更新(通过TCP)触发对多个(100s)输出的改变.
计算通常很简单(几个循环,只是很多算术),输入速度相当快(100 / s).
目前,我们正在运行4台cpu机器,并在每个机器上运行多个服务(因此多线程是非常无意义的,而Java似乎运行速度更快,而不需要同步块等)来实现多线程).现在有一个很强的推动速度,我们现在可以访问24个处理器机器(如果需要,每个进程),所以我想知道如何最好地继续 – 大规模多线程Java或更容易编码的东西,如Erlang.
解决方法
但是,您可以使用外部数字库和数据库,并使用Erlang作为MSG交换机:D这是couch-db所做的:P
– 编辑 –
>如果将算术运算移动到Erlang异步IO驱动器中,erlang将与语言拍摄的东西一样好 – 但是使用24 cpu也许并不重要; erlang数据库是程序性的,因此相当快 – 这可以在您的应用程序中被利用,每个事务更新100个实体.
> erlang运行时系统需要是C和C的混合,因为(a)erlang仿真器是用C/C++编写的(你必须从某个地方开始),(b)你必须和内核交谈来做异步文件和网络io,(c)系统的某些部分需要快速起泡 – 数据库系统的后端(健忘).
– 讨论 –
使用共享内存总线的6核* 4 cpu拓扑中的24个cpu – 您有4个NUMA实体(cpu)和一个中央内存.你需要对范式有所了解,无共享的多进程方法可能会杀死你的内存总线.
要解决这个问题,您需要创建具有6个处理线程的4个进程,并将每个处理线程绑定到相应cpu中的相应核心.这6个线程需要进行协作多线程 – Erlang和Lua都有这样的特性 – Erlang以硬核方式做到这一点,因为它具有一个完整的调度程序作为其运行时的一部分,它可以用来创建多个根据需要进行处理
现在,如果要在4个进程中分配任务(每个物理cpu 1个),那么您将是一个快乐的人,但是您正在运行4个Java VM(可能是)认真的工作(因为许多原因).需要解决的问题是更好的切片和切割问题的能力.
在Erlang OTP系统中,它是专为冗余的强大的网络系统而设计的,但现在正在向同一机型的NUMA-esque cpu运行.它已经有一个踢脚踢SMP模拟器,它将很快成为NUMA感知.通过这种编程模式,您可以有更好的机会使您强大的服务器饱和,而不会对您的公共汽车造成伤害.
这个讨论也许是理论上的;然而,当您获得8×8或16×8拓扑结构时,您也将为此准备好.所以我的答案是当你的主板上有两个现代的物理cpu时,你应该考虑一个更好的编程范例.
作为以下讨论的主要产品的示例:Microsoft’s SQL Server is CPU-Level NUMA-aware in the SQL-OS layer,数据库引擎在其上构建.