`
mryufeng
  • 浏览: 982975 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

erlang的atom实现

阅读更多
atom在erlang里面的作用非常大,特别是在消息匹配的时候,所以需要个非常高效的实现。erts的index.c hash.c atom.c用来实现atom. atom在内部表示的时候是个index. atom是个字符串,首先存在hash表里,然后把在hash里的slot,放在index的索引表里。这样要获取atom就非常高效,基本是2次指针运算。当需要把atom传送到外部的时候,第一次的时候就乖乖的送字符串的内容,同时把这个atom cache起来,以后再发送的时候就可以只传送在cache中的index了,大大提高了网络传输效率。具体的常见dec_atom enc_atom, external.c中。

细节中可以看到erlang非常注意性能。
2
0
分享到:
评论
2 楼 mryufeng 2008-12-22  
index是个整数索引  对端收到NEW_CACHE方式的atom的时候 就把远端的atom的index, 放到自己cahche的index slot里面,保证了双方的index指向同一个字符串。
具体的请参看 enc_atom  dec_and_insert_hashed_atom。

赞扬下你, 研究的很深入。
1 楼 panxiaof 2008-12-18  
ATOM 第一次的时候就乖乖的送字符串的内容,同时把这个atom cache起来,以后再发送的时候就可以只传送在cache中的index了。
有一点我想更明确一下,如果是两个机器都会用一个atom,应该是两台机器都cache吧,
但两次cache的时候,在两台机器上,对应的指针也是一样的吗?(有一点我是知道的,就是erlang的hash函数,即使不同机器每次执行的结果都一样的)

相关推荐

    erlang_版本24.3.4.4

    - **Erlang的数据类型**:包括原子(atom)、整数、浮点数、字符串、列表、元组、位串等。 - **Pattern Matching**:Erlang的匹配操作符`=`允许在函数调用、case语句和receive语句中进行模式匹配。 熟悉这些概念和...

    erlang压缩包.rar

    2. **分布式**:Erlang节点可以在多台机器上运行,通过简单的节点连接实现分布式计算。 3. **错误恢复**:Erlang提供了容错机制,允许进程在出现错误时优雅地重启。 4. **OTP(Open Telecom Platform)**:Erlang ...

    erlang win64_18.1

    5. 朴素的数据类型:Erlang的动态类型系统包含原子(atom)、整数、浮点数、列表、二进制等,简单且易于理解。 Erlang在18.1版本中可能引入了一些新特性、改进和修复。例如,可能对性能进行了优化,增加了新的...

    inside Erlang VM3

    - **高效数据结构**:Erlang内置了几种高效的数据类型如原子(Atom)、二进制(Binary)、列表(List)和元组(Tuple)。 - **垃圾收集**:ERTS采用了标记-清除算法,并支持分代垃圾回收策略。 - **软实时系统**:ERTS支持软...

    Programming Erlang

    首先,书中会介绍Erlang的简单数据类型,如原子(atom)、整数、浮点数、字符串和列表,以及如何进行基本的运算和比较。然后,读者将学习到Erlang的函数式编程思想,包括函数定义、模式匹配、匿名函数(也称为闭包)...

    Erlang程序设计].源代码

    6. 数据类型与模式匹配:Erlang的数据类型包括原子(atom)、整数、浮点数、列表、元组等,模式匹配是其语法的一大特色。源代码将展示如何通过模式匹配来解构数据结构和执行条件分支。 7. BEAM虚拟机:Erlang运行在...

    Efficiency Guide (erlang)

    尽管如此,现代Erlang实现了许多优化措施,使得字符串处理在大多数情况下都十分高效。 ##### 1.2.6 误区:修复Dets文件很慢 Dets是一种持久化数据存储方式,在Erlang中广泛使用。修复Dets文件的速度主要取决于数据...

    erlang程序设计

    2. 进程和并发:Erlang的并发模型基于轻量级进程,每个进程有自己的内存空间,进程间的通信通过消息传递实现。这种设计允许大量进程并行运行,且能有效处理错误和崩溃,因为一个进程的失败不会影响其他进程。 3. ...

    erlang 入门练习

    Erlang的数据类型包括原子(atom)、整数、浮点数、字符串、列表、元组、映射和空值(nil)。例如,原子用双引号外的文本表示,如`hello`;列表以方括号包围元素,如 `[1, 2, 3]`。 Erlang的函数定义通常以`-module...

    Erlang中文基礎教程

    Erlang有丰富的内置数据类型,如整数、浮点数、字符串、原子(Atom)、列表和元组等。虽然Erlang是动态类型的,但可以通过类型注解进行类型检查,提高代码的健壮性。 ### 7. 模块与函数 Erlang的代码组织在模块中...

    erlang api 最新资源

    Erlang的核心数据类型非常简单,包括8种基本数据类型:整数(integer)、浮点数(float)、原子(atom)、引用(reference)、函数引用(fun)、端口(port)、进程标识(pid)和位字符串(bitstring)。同时,...

    Erlang实战

    Erlang的数据类型包括原子(atom)、整数、浮点数、列表、元组等。其中,模式匹配是Erlang的一大特色,它允许在函数定义中匹配和解构数据结构,提高了代码的简洁性和效率。 ### 6. 负载均衡与集群 Erlang的分布式...

    Atom-atom-elixir-formatter,Atom编辑器的Elixir源代码格式化程序。对rgreenjr/atom的贡献.zip

    Elixir是一种函数式编程语言,它运行在Erlang虚拟机上,以其并发性和容错性而著称,被广泛用于构建分布式系统和高性能的应用。 Atom-atom-elixir-formatter插件的核心功能是将Elixir代码按照一定的规则进行整理和...

    erlang_term:Erlang术语信息

    在Erlang中,术语(term)是其数据结构的基础,它包含了各种不同的数据类型,如原子(atom)、整数、浮点数、列表、元组、二进制、PID、Port和Ref等。本篇文章将深入探讨Erlang术语信息,以及它们在内存消耗、数据...

    Atom-atomex,专注于标准遵从性、安全性和可扩展性的Elixir Atom Feed Builder.zip

    Atom-atomex是一个基于Elixir语言的库,专门设计用于创建符合Atom Feed规范的XML文档。Atom Feed是一种标准格式,用于发布和订阅...对于需要在Elixir项目中实现RSS或Atom订阅功能的开发者来说,这是一个理想的选择。

    Erlang中的注册进程使用实例

    在 Erlang 中,进程间通信(IPC)主要依赖于消息传递,即通过消息邮箱来实现。本文将深入探讨Erlang中的注册进程及其使用实例,以便更好地理解和应用这一特性。 首先,了解Erlang中的进程。每个进程都有一个唯一的...

    pqueue:Erlang优先级队列

    尽管 Erlang 的基础数据类型包括原子(atom)、整数、浮点数、列表、元组和二进制等,但它没有内建的优先级队列。然而,Erlang 社区提供了许多库来实现这样的功能,`pqueue` 就是其中之一。 **pqueue 库** `pqueue...

Global site tag (gtag.js) - Google Analytics