当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

Erlang vs TNSDL

发表于: 2011-11-03   作者:bookjovi   来源:转载   浏览:
摘要:       TNSDL是Nokia内部用于开发电信交换软件的私有语言,是在SDL语言的基础上加以修改而成,TNSDL需翻译成C语言得以编译执行,TNSDL语言中实现了异步并行的特点,当然要完整实现异步并行还需要运行时动态库的支持,异步并行类似于Erlang的process(轻量级进程),TNSDL中则称之为hand,Erlang是基于vm(beam)开发,

 

    TNSDL是Nokia内部用于开发电信交换软件的私有语言,是在SDL语言的基础上加以修改而成,TNSDL需翻译成C语言得以编译执行,TNSDL语言中实现了异步并行的特点,当然要完整实现异步并行还需要运行时动态库的支持,异步并行类似于Erlang的process(轻量级进程),TNSDL中则称之为hand,Erlang是基于vm(beam)开发,而TNSDL则没有vm的支持,那么这个基于C为中间语言的TNSDL是如何实现轻量级进程并发的呢?答案是stack快速切换,程序维护着一定数量的空闲"stack",当需要执行一个hand时就在stack pool中选取一个stack,然后发送Linux signal使当前的stack切换至刚选中的临时stack,在执行hand代码是如遇到异步等待点(如正在等待消息),就再一次执行stack切换去执行其他hand代码,如刚才的hand收到了消息后,则程序又切换到第一个stack继续执行第一个hand的代码,这样就实现了用“C+动态库”实现异步并行的框架,和Erlang的process执行基本类似,但也不完全相同,相比而言erlang在vm的支持下实现的更好。

    Erlang的process有reduction,原理类似于kernel的time slice,用于统计每个process占用CPU的时间,这是scheduler的工作核心,具体说就是Erlang可以在任何时间点切换到其他process执行,而无需等到异步等待点,但TNSDL则无法做到这一点,因为TNSDL是基于C的,C程序的调度是由kernel控制,Erlang的调度则是beam控制的,同时TNSDL的smp与多线程效率无法与Erlang相比。

    TNSDL基于C语言,当然免不了coredump,Erlang则不会出现coredump(但是会有erlang级别的dump产生),除非erlang程序中包含NIF或driver这种自实现模块。

    TNSDL的消息通信是私有的消息发送机制(基于RDS),类似于Ericsson的TIPC,总的来说与Erlang有几分相似,对节点分布完全透明,每个hand都有一个PID标识,Erlang process也是如此。

    Erlang的OTP包含有分布式数据库mnesia,TNSDL则整合与私有的内存分布式数据库MFS,MFS相比与mnesia相差太远,不作讨论

    Erlang有着强大的otp支持,otp对erlang的最用可相比与JDK对java的作用,而TNSDL则没有相对完善丰富库的支持。

    TNSDL中带有built-in的FSM:State(S) x Event(E) -> Actions(A), State(S'),

Erlang中则无built-in的状态机特性,但OTP中gen_fsm却把FSM表现的非常好。

 

    从可靠性的角度而言,Erlang有built-in的可靠性支持,TNSDL也有类似的机制,相差不大。

 

    个人认为TNSDL比Erlang的性能好得多,毕竟TNSDL可看做是native language,也没有gc,但开发效率则完全比不上Erlang,Erlang编程的otp,动态类型,模式匹配,escript,process无共享等特性使编程人员更加快速的专注于业务逻辑,而不是语言本身,当然Erlang也有一定的学习成本,精通Erlang的人则是少之又少,中国的学院式软件教育过多的关注面向对象,使得大部分学生不知道什么是函数式编程语言。

 

    附上Erlang编程圣经: programming_erlang.pdf 

 

Erlang vs TNSDL

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
epmd进程和Erlang节点进程如影随形,在Rabbitmq集群,Ejabberd集群,Couchbase集群产品文档中都会有相
 转载自http://www.cnblogs.com/me-sa/p/erlang_notes_129.html Adding special-purpose proces
今天是年前最后一天上班,晚上就坐车回家了,提前祝各位新年快乐,马到功成,2014齐头并进,健康平
[Erlang 0069] Erlang ordsets ordsets 是lists实现的有序集合.由于数据元素的变动都会触发重新排序
]} 7> queue:in(f,v(6)). {[f,e,d,c,b],[a]} 8> queue:in(g,v(7)). {[g,f,e,d,c,b],[a]} 9>
今天学习了下Erlang单元测试,发现非常有用,现在做个总结: 我们先看一个例子(吐槽下Iteye的erlang
艾德思奇科技有限公司 www.adSage.cn www.pubSage.com Erlang Memcache Auther:xujinzheng xujinzhe
支持任意长度的四则运算: f()会释放之前绑定的变量 显示当前路径和切换路径 使用Emacs编程,这里编
一. ranch app启动: ranch_sup -> ranch_server % 创建ets, 并提供接口给其他进程读写 二. 启动d
SMP:Symmetrical Multi Processor 对称多处理器 原理 1:disable SMP 没有SMP支持的erlang VM 只有
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号