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的开发这就会很轻松!

      

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值