在Erlang比单线程Java更快之前,需要多少CPU
我目前正在使用
Java,我已经在网上阅读了很多关于Erlang的内容,我有两个大问题:
> Erlang会比Java简单多少(如果有的话)? 我已经阅读了大多数机器上的处理器数量,线程模式很难(我同意),但是我正在寻找何时将“线路”跨越,以便我可以在右边更改语言/范例时间. 一点背景/背景: 计算通常很简单(几个循环,只是很多算术),输入速度相当快(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个实体. – 讨论 – 使用共享内存总线的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,数据库引擎在其上构建. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |