`
做一行爱一行吧
  • 浏览: 22471 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang进程概念

 
阅读更多

       接触erlang以后,考虑的最多的应该就是何时创建一个进程,那么这个进程到底是什么,该如何思考这个问题,如果大学四年你从来都没有好好的学习操作系统或者说从来没有认真的学习哪一门语言,那么你对进程和线程之间的知识一定是很模糊的,外加上工作以后接触erlang很多,那么到头来你将深陷于其中很难分辨所谓的。

       我们先来看看系统中我们如何来定义一个进程——打开我们资源管理器



        我们看到如下的一些正在运行的执行文件,也就是所谓的exe文件,打开linux的命令行输入top你也一样可以看到相应的资源占用情况,那么这些就是我们所谓的系统进程,那么所谓的线程呢,他是程序在处理逻辑上的原子单位,可以说一个进程可以包含很多的线程

       erlang的进程一定少不了pid,无论线程怎么被创建都会生成一个pid,那么系统的进程也是一样,包括一些轻量级的进程系统生成的线程也会存在pid例如linux系统,这些系统进程的pid是有系统分配的,然而erlang则不然,我们打开我们的erlang节点观察erlang的进程树信息



 

        这里我们看到了一个kernel  erlang实现的独立内核,这个内核实际上是在erlang的虚拟集中运行的,你可以看到内核监督者kernel_sup,其实我们的进程就是有kernel来完成创建和分配pid的!

       区别

     说到这里你一定会问,说这些有什么用呢?

       如果你够细心,你一定会发现erlang开发的游戏是会有成百上千个进程一起完成操作的,每一个玩家是一个进程,有的时候几千个玩家在同一个线,这个时候也就意味着有更多于玩家的erlang进程存在与系统中!

      真正的系统进程是不存在这种可能的,依照现在的硬件设施,一个服务器上跑几千个进程那是非常可怕的,因为系统的进程被创建以后会出现资源占用的问题,这个时候系统就要做很多的处理,也就是我们说的系统调度,来处理进程之间的资源占用,即便是我们使用线程也是如此,这些由系统分配直接分配的资源直接进入cpu进行操作,外加玩家大量的信息交互代表的就是没有一个进程或者线程是闲置的,那么调度就更不可能了!

       那么erlang是怎么实现这些操作的,简单来说erlang的进程是针对于erlang自身来讲的,在我看来,这些进程的pid和内存都是有erlang的内核来分配,所以这和系统挂不上钩,更像是一个线程中的列表或者数组,erlang的并发原语只是形式上的和系统的并发原语类似,归根结底,也只不过是一个处理池一类的东西,根据pid来进行数组的创建和更新,这个时候根据pid来进行的更新就不会出现数据失真的情况!而且不管我们创造多少个数组和列表,只要不超出内存范围,那么就根本不会影响系统本身的运行!(至于erlang进程中同步异步的问题,也可以根据一些锁操作来完成)(这些只是我对erlang进程的一个理解)!

       依次,我们在处理erlang的进程时更多关心的是同步异步的问题,我们从来不会去深究里面的锁操作和

资源占用的问题,因为这些内核已经帮我们自主完成了 ,所以针对于并发操作java和c的程序猿要付出更多的劳作和思考,而erlang的开发这就会很轻松!

      

  • 大小: 3.6 KB
  • 大小: 31 KB
  • 大小: 8.6 KB
分享到:
评论

相关推荐

    Erlang OTP设计原理文档 中文版本

    Erlang OTP 设计原理文档 概述: 在Erlang/OTP中有一个基本概念叫监督树。这是一种建立在督程与佣程思想上的进程结构化模型。

    erlang——Mnesia用户手册.pdf

    4.5.作业(Activity)概念和多种存取上下文 4.6.嵌套事务 4.7.模式匹配 4.8.迭代 5、其它.Mnesia.特性 5.1.索引 5.2.分布和容错 5.3.表分片 5.4.本地内容表 5.5.无盘节点 5.6.更多的模式管理 5.7....

    otplike:在core.async上类似ErlangOTP的Clojure的过程和行为

    它模拟了基本的概念,例如过程,过程链接,监视,标准行为。 基本原理 尽管core.async为异步应用程序提供了坚实的基础,但我们的经验表明,需要更高级别的系统构建块。 看来某些想法可以从Erlang / OTP中获取并在...

    Evedis:Vedis的Erlang绑定,这是一个嵌入式数据存储区C库

    它的API在概念上与类似,但是没有网络层,因为Vedis在主机应用程序的同一进程中运行。 Evedis使用Erlang本机实现功能(NIF)来包装Vedis库,以在Erlang应用程序中使用。 特征 Vedis功能 无服务器数据存储引擎。 ...

    面对软件错误构建可靠的分布式系统

    系统存在不完善的环节,但是我们希望我们的系统可靠,矛盾的要求,满足的条件两种解决方案,语言本身或者是方法库 在ERLANG中,对于上述的...速错进程的概念,现成的错误存在互相传递的隐患,会破坏掉系统内部的坚固性

    初级java笔试题-Concurrency-concepts:并发、多线程和并行编程概念指南。详细解释每个概念之间的差异,它们的优缺点

    初级java笔试题并发、多线程和并行编程概念 本文档描述了各种并发、多线程、并行编程方法和概念。 目的是编写一个单独的文档/wiki,其中包含您需要了解的有关并发的所有信息。 事情应该尽可能详细地解释清楚。 欢迎...

    swi-web-prolog:Web Prolog 的概念验证 SWI-Prolog 实现

    想象一下带有进程和邮箱以及发送和接收的Prolog方言——强大的并发和分布式编程所必需的所有手段。 或者,将其视为具有逻辑变量、回溯搜索和内置事实和规则数据库的Erlang方言——逻辑编程、知识表示和推理的手段。...

    Mnesia用户手册 4.4.10版.rar

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...

    springCloud

    微服务架构的核心思想是,一个应用是由多个小的、相互独立的、微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖。不同服务通过一些轻量级交互机制来通信,例如 RPC、HTTP 等,服务可独立扩展伸缩,每...

    LINGO软件的学习

    LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 当你在windows下开始运行...

Global site tag (gtag.js) - Google Analytics