首页 > erlang高效率的原因是什么?

erlang高效率的原因是什么?

介绍说erlang并发高效,进程切换快,具体原因是什么?


Erlang 中的进程是它自己实现的用户级进程,不是指操作系统级的进程/线程。

  1. Erlang 进程非常轻量,短时间能快速创建和销毁,并且切换代价小;
  2. Erlang 进程间通讯使用消息,而不是多线程编程中常用的锁机制,没有等待锁的时间消耗。

erlang是从系统底层开始构建他的并发机制的,erlang中的进程其实是linux中kernel space中userspace级别的线程,包括调度基本都是在kernel级别完成的,所以调度起来很高效。erlang并发高效其实相对于应用场景来说的,erlang本身最适合应用于通信方面的应用,本身计算和执行能力还是有限的。


  1. erlang是一个操作系统,而不只是语言。这一点非常重要。golang也是如此。

    erlang自己重新定义了调度单元(erlang进程),实现了调度器。调度开销非常小。 而像java python这类语言,你创建的线程就是OS的线程,是靠OS调度,而不是虚拟机自己调度。

  2. erlang是一种新的编程范式,新的思维方式。(相对C++ Java Python这些语言而言)

    erlang没有全局变量、而且变量不可变、进程间靠消息通信…… 这些语言上的限制和要求,使得你在设计系统的时候只能采用erlang的思维方式,否则写不出代码,没法实现。最终得到的就是天然避免或减少了数据共享的并发性很高的系统。

    ——共享就会有竞争,竞争就需要锁,锁就是多核时代,并发编程的最大敌人,没了锁就能飞起来。

  3. 不得不否认,erlang奇怪的语法,独特的思维方式,天然阻隔了小白的进入。那绝不是上几天蓝翔技校就可以学会的。erlang程序员,一般都会是技术高手。写出的代码当然不会差了。钱最能说明问题,erlang程序员平均薪酬是最高的。

  1. 平台。Linux 平台切换进程的速度很快,而在 Windows 平台就很慢了,所以 Windows 鼓励使用线程,Linux 鼓励使用进程。@依云 而 Erlang 是自己实现的进程,不局限于任何平台,切换起来是飞快的。

  2. 思想。一句话「要么好好跑,要么死翘翘」。说白了就是,相仿设法的挽救一个进程,不如放弃一个进程,再开另一个。

  3. 使用者。erlang 小众,使用它的都是工程师,所以代码效率高。任何语言刚开发出来,都在学院使用,然后是工程师,等到他普及以后,各种问题就随之而来,比如 java。


erlang的最初的电信服务需求注定了 erlang必须要满足 高并发, 分布式, 容错等要求, 所以甚至一开始的process都不是以actor模型建立的,而是以实际业务需要创建的(当时在爱立信有另外一个语言参考),在erlang,基本无法写出高效的顺序的,命令式的程序,因为它本质上不支持这么做, 试想在任何一个oop语言里,只用一个object来完成所有工作是多么荒唐.
erlang: the movie里joe说到,同样功能的erlang代码是c的10/1, 而业界都认为代码越少,bug越少,eralng的虚拟机优化了几十年了.
erlang的思想已经达了很高的境界,基于recurison的代码通常很简短而且不容易出错.

【热门文章】
【热门文章】