在Erlang比单线程Java更快之前,需要多少CPU

前端之家收集整理的这篇文章主要介绍了在Erlang比单线程Java更快之前,需要多少CPU前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在使用 Java,我已经在网上阅读了很多关于Erlang的内容,我有两个大问题:

> 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获得很多收益.你的工作似乎很适合Java. Erlang善于微小的交易 – 例如msg切换或提供静态或简单动态网页.不是在企业号码处理或数据库工作负载.

但是,您可以使用外部数字库和数据库,并使用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,数据库引擎在其上构建.

猜你在找的Java相关文章