`
AvinDev
  • 浏览: 112367 次
社区版块
存档分类
最新评论

[笔记]Erlang R12B中的sub binary优化

阅读更多
在Erlang的 DOC erl5.6.3/doc/efficiency_guide/binaryhandling.html#4 中,第四章提到了Binary的优化。由于虚拟机经过了改良,一些在R11B使用的Binary优化技巧,在R12B就不推荐使用了。

特别注意的是sub binary的使用。举个例子,从一个大的Binary中取出以某个字节结束的一句:

extract_str_end_with_tag(Data, Tag) ->
    extract_str_end_with_tag2(Data, <<>>, Tag).

extract_str_end_with_tag2(<<Tag, T/binary>>, Buffer, Tag) ->
    extract_str_end_with_tag3(Buffer, T); %% 留意这里
extract_str_end_with_tag2(<<B, T/binary>>, Buffer, Tag) ->
    extract_str_end_with_tag2(T, <<Buffer/binary, B>>, Tag);
extract_str_end_with_tag2(<<>>, Buffer, Tag) ->
    {not_found, Buffer}.

extract_str_end_with_tag3(Str, NextStr) ->
    {found, Str, size(Str), NextStr}.


上面的代码由于将sub binary T 传递给 extract_str_end_with_tag3/2,在使用 erlc +bin_opt_info 编译的时候会提示:

引用
Warning: NOT OPTIMIZED: called function extract_str_end_with_tag3/
2 does not begin with a suitable binary matching instruction


我的做法是加入一个是否匹配的字段:
extract_str_end_with_tag(Data, Tag) ->
    extract_str_end_with_tag2(Data, <<>>, Tag, not_found).

extract_str_end_with_tag2(RestBinary, Buffer, _, found) ->
    extract_str_end_with_tag3(Buffer, RestBinary); %在found的时候再将RestBinary进行传递
extract_str_end_with_tag2(<<Tag, T/binary>>, Buffer, Tag, _) ->
    extract_str_end_with_tag2(T, Buffer, Tag, found); %这里不使用T
extract_str_end_with_tag2(<<B, T/binary>>, Buffer, Tag, not_found) ->
    extract_str_end_with_tag2(T, <<Buffer/binary, B>>, Tag, not_found);
extract_str_end_with_tag2(<<>>, Buffer, _, _) ->
    {not_found, Buffer}.
	
extract_str_end_with_tag3(Str, NextStr) ->
    {found, Str, size(Str), NextStr}.


这样在编译时就可以进行优化
引用
Warning: OPTIMIZED: creation of sub binary delayed
分享到:
评论

相关推荐

    ERLANG B(爱尔兰B表)

    在实际应用中,Erlang B表的使用往往结合现代计算机技术,通过软件工具进行模拟和优化,以确保通信网络的高效运行。对于网络运营商来说,合理规划基站容量不仅可以提升用户体验,还能节省成本,避免过度投资。 总结...

    ErlangB_爱尔兰B公式_通信网络_

    Erlang B公式,也称为爱尔兰B公式,是通信网络中一个重要的理论工具,主要用于预测在给定服务速率下,多条电话线或信道如何有效地处理呼叫到达的流量。这个公式是由丹麦工程师A.K. Erlang在1909年提出的,它在现代...

    erlangB计算器

    在"实验二(erlangB)"这个压缩包中,很可能包含了MATLAB源代码文件,用于实现Erlang B模型的计算和仿真。这些代码可能包括以下几个部分: 1. 输入参数设置:用户可以输入N和服务通道数λ,程序会根据这些参数进行...

    Erlang B公式计算器

    Erlang B公式是通信网络领域中用于计算呼叫阻塞概率的重要工具,它在电路交换系统,特别是电话交换网络的设计中发挥着关键作用。这个压缩包包含了一个基于Erlang B公式的计算器程序,以及其源代码和实验报告,旨在...

    Erlang_B_model.rar_Erlang B _Erlang B model_Wireless Handbook_e

    **Erlang B模型**是通信工程领域中的一个重要概念,特别是在无线通信系统设计中用于评估系统容量和服务质量。这个模型由丹麦工程师A.K. Erlang提出,主要用于预测电话交换系统的呼叫损失概率,即在给定话务量下,...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    进行binary优化的json解析模块

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

    erlang语言实现binary_to_term完整代码

    erlang提供了binary_to_term 函数,用于把二进制数据转为原始的erlang数据。这个函数都是c实现的,这里用erlang语言实现了,很有参考价值,其他语言可以参考这个解析erlang二进制协议数据。配套文章地址...

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

    随着 R12B 版本的发布,Erlang 进一步优化了 binary 构造和模式匹配的过程。这些优化包括但不限于: - **Binary Construction**:当构建 binary 对象时,Erlang 现在可以更有效地合并多个 small binaries 成为一个...

    Erlang-Formula.zip_Erlang B _Erlang-B_erlang_erlang B计算_erlang C

    Erlang B 和 Erlang C 是在电信领域中广泛使用的两个数学公式,用于预测和管理电话交换系统的呼叫处理能力。这两个公式由丹麦工程师 Agner Krarup Erlang 在20世纪初开发,对于理解通信系统中的呼叫占用率、阻塞率和...

    Erlang OTP 20.1 Windows 64-bit Binary File

    Erlang OTP 20.1 Windows 64-bit Binary File 下载地址:http://www.erlang.org/downloads

    ErlangB-and-ErlangC.zip_erlangB_erlangb图_erlangb表_爱尔兰C公式_爱尔兰公式

    实现爱尔兰B公式和爱尔兰C公式,功能齐全,适用于通信网课程中的实验。

    Erlang-B&C曲线MATLAB源码

    Erlang-B和Erlang-C曲线是通信工程和排队理论中的重要概念,它们用于分析电话交换系统和其他服务系统的性能。这两个模型可以帮助我们理解在给定资源限制下,多条电话线路或服务台如何处理呼叫或请求的流量。MATLAB...

    Erlang B公式计算器MFC源码

    Erlang B公式是通信工程领域中用于计算呼叫中心或电话交换系统呼损率的重要数学工具,尤其在设计和优化通信网络时非常关键。 Erlang B公式起源于爱尔兰工程师Eric A. Bell的研究成果,它主要用于预测在一个给定的...

    Erlang-B-Calculator.zip_erlang B calculator

    Erlang-B计算器是一款基于Java编程语言在Eclipse开发环境中实现的应用程序,专门用于计算通信系统中的爱尔兰B公式。爱尔兰B公式是电信领域中用来预测电话交换机或网络拥塞情况的重要工具。这个计算器不仅提供了核心...

    读书笔记:ErlangOTP设计原则中文文档.zip

    读书笔记:ErlangOTP设计原则中文文档

    Erlang深度分析

    Erlang深度分析所包含的内容非常广泛,涵盖了从Erlang虚拟机的工作原理、性能优化、最佳编程实践,到最新的Erlang版本中新增特性的介绍。Erlang语言因其独特的并发模型、高效的分布式计算能力和灵活的网络编程接口,...

    <27>erlang record

    标题中的“&lt;27&gt;erlang record”可能指的是Erlang编程语言中的Record特性,它是一种数据结构,类似于结构体或者哈希表,用于组织和操作数据。在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据...

Global site tag (gtag.js) - Google Analytics