接触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的开发这就会很轻松!
相关推荐
1. 进程概念 在Erlang中,进程不同于操作系统中的线程或进程。它们是独立的执行流,有自己的堆栈和局部变量,但共享全局的Erlang虚拟机(VM)。每个进程都有一个唯一的进程ID(PID),用于标识和通信。创建进程的...
"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...
2. **掌握并发编程**:习题可能包含创建和管理Erlang进程、实现进程间的消息传递,帮助学习者理解并发编程的核心概念。 3. **函数式编程思维**:习题可能涉及无副作用函数的编写,以及如何利用函数式编程特性如递归...
Erlang以其强大的错误恢复能力和轻量级进程(称为Erlang进程)而闻名,这些进程具有内置的并发性和容错性。 在安装Erlang 24.3.4.4之前,首先需要了解你的操作系统是否支持。Erlang支持多种平台,包括Windows、...
Erlang的并发模型是基于轻量级进程(也称为Erlang进程)的,它们之间的通信通过消息传递完成。这种方式降低了同步开销,提高了系统的并行性。每个进程都有自己的内存空间,减少了数据竞争的风险。当一个进程崩溃时,...
4. **分布式编程**:Erlang进程可以分布在多个节点上,实现分布式系统的构建。书可能讲解了如何进行节点间通信、分布式数据管理和负载均衡。 5. **模式匹配**:Erlang的函数定义允许模式匹配,使得代码更加简洁和可...
在IT领域,Erlang是一种强大的并发...了解并熟练掌握Erlang和Linux的这些工具和概念,对于开发、调试和维护高性能的分布式系统至关重要。通过持续学习和实践,你可以提升自己的IT技能,更好地应对各种复杂的技术挑战。
2. **故障隔离**:Erlang进程之间通过异步消息传递通信,当一个进程崩溃时,不会影响其他进程,这种机制提供了天然的容错性。 3. **函数式编程**:Erlang强调纯函数,即没有副作用的函数,这使得代码更易于理解和...
然而,在达到32767个连接数时,Erlang进程挂了。 后来,我们使用strace和stap工具来查找性能瓶颈,发现Erlang在Linux上使用传统的poll模型,而不是epoll模型。通过修改configure文件,打开epoll支持,提高了网络...
Erlang是一种高级编程语言,特别适用于并发、分布式和实时计算系统。它的设计目标是创建一个高可用性、容错...在安装和使用Erlang时,了解其基本概念和特性,以及如何利用OTP库,将有助于更好地开发和维护Erlang项目。
5. **并发与分布式特性**:Erlang以其强大的并发处理能力著称,新版本可能在进程管理、消息传递等方面有进一步的改进。 6. **编译器升级**:Erlang的BEAM虚拟机和编译器可能会有优化,使得编译速度更快,生成的代码...
学习Erlang的关键概念包括: - **模式匹配**:在函数定义中,可以使用模式匹配来确定输入值的结构。 - **列表处理**:Erlang提供了强大的列表处理功能,如`hd`(head)和`tl`(tail)用于获取列表的第一元素和剩余...
编程+Erlang.pdf可能会详细介绍Erlang的基础语法、数据类型、过程和模块等概念。 2. **并发编程**:Erlang的并发模型是其独特之处。它通过轻量级进程(Lightweight Processes, LWP)实现并发,进程间通信(Inter-...
- **概念**: Port驱动程序允许Erlang进程与外部程序进行通信。 - **实现**: 通过`erlang:open_port/2`函数创建一个Port。 - **应用场景**: 实现Erlang与C语言编写的程序之间的交互。 #### 13. SMP支持 - **概念**: ...
- **进程模型**:Erlang的进程不是传统操作系统中的进程,它更轻量级,一个Erlang虚拟机可以同时运行数千个进程。 - **消息传递**:Erlang中的进程通过消息传递来交互,每个进程都有一个消息队列,它只会在接收到...
5. **Jinterface**:Jinterface是Erlang和Java之间的互操作库,它允许Erlang进程与Java虚拟机(JVM)中的对象进行通信。这对于既有Java基础又想利用Erlang优势的开发者来说,是一个强大的工具。 6. **Eclipse插件...
由于Erlang进程具有独立的内存空间,一个进程的崩溃不会影响其他进程,这大大增强了系统的整体稳定性。Erlang的错误处理机制允许系统在出现问题时进行优雅降级,而不是完全崩溃。 最后,Erlang的开放源码特性促进了...
读者将了解Erlang的模式匹配、函数式编程概念以及如何利用轻量级进程进行并发编程。第二部分深入探讨OTP,讲解其设计原则和组件,如行为(Behaviours)、分布式编程和监控。最后,第三部分通过构建实际项目,演示...
它以其强大的错误恢复能力、轻量级进程(称为Erlang进程)以及简单而强大的并发模型而闻名。在深入探讨Erlang程序设计之前,我们先来了解一下Erlang的基础概念。 1. 函数式编程:Erlang是一种纯函数式编程语言,这...
通过轻量级进程(Lightweight Processes, LWP)的概念,Erlang实现了高度并行执行,每个进程拥有自己的堆栈和消息队列,这使得进程间的通信高效且隔离。此外,Erlang的进程间通信(Inter-Process Communication, IPC...