`

erlang对binary的优化

 
阅读更多

 

erlang binary:

  container

    1 refc(reference-counted) binaries

      1 ProcBin: link list, to garbage collect

      2 binary object: outside all process heaps

    2 heap binaries: up to 64B, process heap, copied when sent

  reference

    1 sub binaries: a reference to a part of refc or heap binary

    2 match contexts

 

 

-module(test_binary).

-export([test/0]).

test() ->
    test1(),
    test2(),
    test3(),
    ok.


%% 超过64是refc binary
test1() ->
    A = binary:copy(<<1>>,65),
    <<_:10/binary,B:10/binary,_/binary>> = A,
    Pid = spawn(
            fun() ->
                    receive
                        Bin ->
                            65 = binary:referenced_byte_size(Bin)
                    end
            end),
    Pid ! B.

%% 不超过64是heap binary
test2() ->
    A = binary:copy(<<1>>,64),
    <<_:10/binary,B:10/binary,_/binary>> = A,
    Pid = spawn(
            fun() ->
                    receive
                        Bin ->
                            10 = binary:referenced_byte_size(Bin)
                    end
            end),
    Pid ! B.
    
%% append创建新的refc binary
test3() ->
    A = binary:copy(<<1>>,60),
    <<_:10/binary,B:10/binary,_/binary>> = <<A/binary, 0>>,
    Pid = spawn(
            fun() ->
                    receive
                        Bin ->
                            61 = binary:referenced_byte_size(Bin)
                    end
            end),
    Pid ! B.

%% refc binary如果需要被改动,则尽量在原有的refc binary上改;
%% 如果被共享,则需要拷贝
%% efficiency_guide/binaryhandling.html#id65923
分享到:
评论

相关推荐

    介绍 Erlang binary 和 bit string 数据类型的经典文章

    - **Pattern Matching**:在进行模式匹配时,Erlang 会尽可能减少对 binary 内部结构的访问,以提高匹配速度。 这些改进对于提高 Erlang 在处理大量二进制数据时的性能具有重要意义。根据作者提供的性能数据显示,...

    进行binary优化的json解析模块

    标题中的"binary优化的json解析模块"意味着这个模块设计用于快速处理JSON数据,特别关注减少内存消耗和提高解析速度。Erlang的二进制操作非常高效,因为它直接在内存中操作二进制数据,而无需额外的字符串转换步骤。...

    Efficiency Guide (erlang)

    在Erlang中,字符串实际上是字符列表,因此对字符串的操作实质上是对列表的操作。尽管如此,现代Erlang实现了许多优化措施,使得字符串处理在大多数情况下都十分高效。 ##### 1.2.6 误区:修复Dets文件很慢 Dets是...

    erlang+rabbitmq.zip

    Erlang 提供了强大的并行处理能力,它的 BEAM(Binary Emulation of a Machine)虚拟机支持轻量级进程和热代码替换,确保了系统在运行时可以无缝升级。这个版本的 Erlang 支持 RabbitMQ 3.8.x 系列,为 RabbitMQ ...

    Erlang实战

    - **注重性能优化**:采用高效的查询算法和数据结构,充分利用Erlang的并发特性来提升系统性能。 - **易于扩展**:使用Erlang的热代码更新机制(hot code load/swap),使得系统可以在不停机的情况下进行升级和扩展...

    binpp::1234:Erlang二进制漂亮打印机

    **Erlang与二进制数据...总的来说,`binpp`是Erlang和Elixir开发中的一个实用工具,它简化了对二进制数据的调试工作,提高了开发效率。了解并熟练运用这类工具,对于深入理解和优化涉及二进制数据处理的代码至关重要。

    Erlang实现遗传算法.docx

    ### Erlang 实现遗传算法详解 #### 一、引言 遗传算法(Genetic Algorithm, GA)是一种模拟自然界中生物进化过程的优化搜索方法。它借鉴了自然选择、遗传、变异等生物进化的机制,通过迭代的方式寻找问题的最优解...

    erlang_term:Erlang术语信息

    元组在Erlang中常用于表示结构化数据,比如键值对或结果集。 5. **二进制(Binary)**:二进制对象是用于高效处理大量数据的结构,如文本、图像或音频数据。它们在内存中以连续的字节块存储,适合进行位操作和流...

    ecbor:Erlang CBOR库

    在处理数据序列化时,Erlang社区提供了多种库,其中之一就是ECBOR,它是Erlang对 Concise Binary Object Representation (CBOR) 的实现。CBOR是一种高效的数据序列化格式,适用于网络传输和存储,它在JSON的基础上...

    otp_win_64_24.0.exe

    1. Erlang VM(虚拟机):BEAM(Binary Emulator),它是Erlang运行时的核心,负责执行Erlang代码。 2. 标准库:包含了各种预定义的模块,如lists、io、math等,为常见的编程任务提供函数支持。 3. 工具集:如编译器...

    ernie:有效的数据二进制编码(基于Erlang的外部条款格式)

    ERNIE的出现是为了优化数据交换的效率和可靠性,尤其是在分布式系统和实时计算场景中。 ERNIE的核心是Erlang的ETF,这是一种紧凑、高效的二进制表示形式,用于序列化和反序列化Erlang和Elixir的数据结构。ETF能够...

    FsServer:Julia 的基于 TCP 的 Erlang 二进制术语服务器

    Erlang 二进制术语(Erlang Binary Term Format)是 Erlang 语言中用于序列化和反序列化的标准格式,通常用于进程间通信(IPC)和网络通信。FsServer 使用这种格式,使得它能够与 Erlang 系统或支持该协议的其他系统...

    位置:用于IP地址的地理位置和ASN查找的MMDB阅读器

    标题中的“位置:用于IP地址的地理位置和ASN查找的MMDB阅读器”指的是一个软件工具,它能够解析MaxMind的MMDB(Binary Metadata Database)格式的数据库,为IP地址提供地理定位和 Autonomous System Number (ASN) ...

    mongodb官网文档集合

    总之,MongoDB官网文档是一个包罗万象的知识宝库,不仅包含了产品特性的详细介绍,还有针对开发者和管理员的实际操作指南,以及对技术原理的深度剖析,对于任何希望深入了解和熟练掌握MongoDB的人来说,都是不可或缺...

    MongoDB简介与实践

    - **列存储/列族**:这种类型的数据库优化了对数据列的处理,特别适合于大数据分析场景。 #### MongoDB特性详解 - **面向文档的存储**:MongoDB采用了BSON(Binary JSON)格式来存储文档,这是一种类似于JSON但更...

    thrift相关

    6. 数据类型:Thrift支持多种基本数据类型,如bool, i8, i16, i32, i64, double, string, binary,以及复杂的数据结构,如结构体(struct)、枚举(enum)、集合(set, list, map)等。 Thrift的优势在于: 1. 跨...

    MongoDB Training

    - **NoSQL数据库:** MongoDB是一种非关系型数据库,基于文档存储,使用BSON(Binary JSON)格式来存储和查询数据。 - **JSON风格文档:** 数据以类似于JSON的结构存储,这种灵活性使得数据模型可以轻松适应不断变化的...

Global site tag (gtag.js) - Google Analytics