`
┿┅мīSS
  • 浏览: 96012 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

erlang学习笔记(一)

 
阅读更多

 

1.lists:append(List1, List2) -> List1 ++ List2.  左边的list要复制,递归时要注意。

  lists:flatten/1 将嵌套的list变成不嵌套,当只有一个层级的时候,用lists:append/1

 

2. if、when 的表达式异常会被内部吞掉

 

3.快速排序: 取一个基数,比它小的放左面,比它大的放右面,然后重复递归。

  qSort([H|T]) ->

qSort([X || X <- T, X < H ]) ++ [H] ++ qSort([Y || Y <- T, Y > H]);

  qSort([]) ->

[].

 

4.lists:reverse() 片段

  reverse([] = L) ->

    L;

  reverse([_] = L) ->

    L;

  reverse([A, B]) ->

    [B, A];

  reverse([A, B | L]) ->

    lists:reverse(L, [B, A]).

 

5.用re模块替换正则表达式

 

6.使用erlang:send_after/3、erlang:start_timer/3 比用timer模块效率更高。

    timer模块的使用一条独立的线程来管理所有定时器,如果太多定时或者频繁取消定时,就会影响性  

 

   能。(timer:tc/3 or timer:sleep/1 除外)

    send_after如果是给注册名进程发送,就算进程不存在,都不会产生异常,进程消失,也不会自      

 

动取消定时;相反,如果是给PID发送,当进程不存活的时候会自动取消定时。

    取消定时用erlang:cancale_time/1

 

7.send_after/3 发送的是Msg,start_timer/3发送的是{timeout,TimeRef,Msg}.

 

8.atom不会被GC回收,所以尽量不要用list_to_atom,或者循环产生大量atom, 默认1048576就会爆掉

 

9.length/1效率是N,不是常数,用tuple_size/1, byte_size/1代替size/1 会更容易发现问题和性能更

 

 

10.用位模式匹配 代替split_binary/2

 

11. 当2个list很大时, -- 操作很慢。

    不要 HugeList1 -- HugeList2

    应该 

HugeSet1 = ordsets:from_list(HugeList1),

        HugeSet2 = ordsets:from_list(HugeList2),

        ordsets:subtract(HugeSet1, HugeSet2)

 

    如果顺序很重要的话,可以

Set = gb_sets:from_list(HugeList2),

        [E || E <- HugeList1, not gb_sets:is_element(E, Set)]

 

 

12.erlang最大同时存活线程数默认是32768,系统启动时可以通过 +p 最大设置为 268435456 

 

13.atom中的字符最大长度255

 

14.默认最大的ets table数量是1400, 可以通过 ERL_MAX_ETS_TABLES 修改

 

15.方法最多可以有255个参数

 

16.循环N次执行某个函数F: lists:foreach(fun(_)-> F() end,lists:duplicate(N,dummy)).

 

17.simple_one_for_one 特点:

     1.simple_one_for_one内部保存child是使用dict,而其他策略是使用list,因此       

 

simple_one_for_one更适合child频繁创建销毁、需要大量child进程的情况,具体来说例如网络连接的

 

频繁接入断开。

     2.使用了simple_one_for_one后,无法调用terminate_child/2 delete_child/2 restart_child/2 

     3.start_child/2 对于simple_one_for_one来说,不必传入完整的child spect,传入参数list,会自

 

动进行参数合并。在一个地方定义好child spec之后,其他地方只要start_child传入参数即可启动child

 

进程,简化child都是同一类型进程情况下的编程。

 

18.prim_inet 模块

 

19.io_lib:format(<<"update `player` set `last_login_time` = ~p, `online_flag`=1 where      

 

id=~p">>,[Time, Id])

 

20.用atom标识方法

     例如: 

validate_name(Name)  ->

   validate_name(len, Name).

 

validate_name(len, Name) ->

    case asn1rt:utf8_binary_to_list(list_to_binary(Name)) of

        {ok, CharList} ->

            Len = string_width(CharList),   

            case Len < 11 andalso Len > 1 of

                true ->

                    validate_name(existed, Name);

                false ->

                    %%角色名称长度为1~5个汉字

                    {false, 5}

            end;

        {error, _Reason} ->

            %%非法字符

            {false, 4}

    end; 

 

validate_name(existed, Name) ->

    case lib_player:is_exists(Name) of

        true ->

            %角色名称已经被使用

            {false, 3};    

        false ->

            true

    end;

 

validate_name(_, _Name) ->

    {false, 2}.

 

%% 字符宽度,1汉字=2单位长度,1数字字母=1单位长度

string_width(String) ->

    string_width(String, 0).

string_width([], Len) ->

    Len;

string_width([H | T], Len) ->

    case H > 255 of

        true ->

            string_width(T, Len + 2);

        false ->

            string_width(T, Len + 1)

    end.

 

21.element(N, Tuple) 获取元组指定位置的元素

 

22.nth(N, List) 获取第N个list元素

 

23.ets相对进程字典的优点:

      1.其它进程可以共享

      2.ets提供了查找,模糊查询,迭代等方法,而进程字典只是一个简单的key-value存储

      3.可以保存数据到文件

      4.如果拥有者进程挂了,ets可以由继承进程拥有

分享到:
评论

相关推荐

    erlang 学习笔记1

    【描述】虽然描述中没有具体的信息,但我们可以假设这是一个博主分享的关于Erlang学习的初步笔记,可能涵盖了基本语法、并发模型以及一些实用工具的使用。 【标签】"源码"和"工具"提示我们,这篇笔记可能包括了...

    erlang学习笔记

    ### Erlang学习笔记:深入解析Erlang编程与系统管理 #### 1. Erlang编程基础与资源 在深入探讨Erlang编程之前,我们首先需要了解一些基础资源和学习资料。Erlang官方网站([www.erlang.org](http://www.erlang.org...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Erlang是一种为构建大规模并发系统而设计的函数式编程语言。它的核心特性包括轻量级进程(processes)、消息传递和故障隔离。Erlang以其容错性和高可用性著称,广泛应用于电信、分布式系统和实时计算领域。 压缩包...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    java版商城源码-hello-erlang:Erlang的笔记和例子

    这些是我在学习过程中关于 Erlang 的笔记和主要引用。 检查部分以查看我从哪里获取报价。 请注意,此 repo 始终在进行中。 (我还没找到时间完成这本书。) 话题 陷阱 erlang 没有null值这样的东西 每个函数都需要...

    rabbitmq学习笔记和软件和插件

    **RabbitMQ学习笔记与软件插件详解** RabbitMQ是一种广泛应用的消息中间件,它基于AMQP(Advanced Message Queuing Protocol)协议,提供可靠的消息传递服务。在分布式系统中,RabbitMQ扮演着数据交换中心的角色,...

    rabbitmq学习笔记.zip

    在这个“rabbitmq学习笔记.zip”压缩包中,我们可以期待找到一系列关于RabbitMQ的核心概念、安装教程、使用方法以及常见问题的详细说明。 首先,RabbitMQ的基本概念包括生产者(Producer)、消费者(Consumer)、...

    RabbitMq学习笔记1

    在本篇学习笔记中,我们将首先了解RabbitMQ的安装过程。 1. **Erlang的安装**: Erlang是RabbitMQ的基础,因为RabbitMQ是用Erlang编写的。安装Erlang可以通过以下命令完成: ```bash sudo apt-get install ...

    Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法

    Erlang程序设计的书籍是学习这门语言的重要资源。《Erlang程序设计(第2版)》便是一本面向初学者的经典教材,提供了丰富的基础知识和深入的讨论,对理解和掌握Erlang语言有极大帮助。 对于Erlang的安装,目前有...

    XMPP学习入门笔记

    本篇学习笔记汇总了XMPP的基本概念以及多种编程语言下的客户端库介绍,旨在帮助读者快速了解并上手XMPP技术。XMPP作为一种强大的即时通讯协议,不仅具备高度的可扩展性,还支持多种编程语言。这使得开发者可以根据...

    redis 的学习笔记A

    Redis 是一个高性能的键值存储系统,常被用于构建数据缓存、消息队列以及数据库。作为NoSQL数据库的一种,Redis具有丰富的数据结构支持,包括字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted ...

    RabbitMQ学习 笔记

    ### RabbitMQ 学习笔记知识点总结 #### 一、RabbitMQ 历史与背景 RabbitMQ 是一个基于 AMQP(高级消息队列协议)的开源消息中间件,由 Erlang 语言编写而成。AMQP 的出现填补了异步消息处理领域的标准化空白,特别...

    RabbittMQ软件,资料及笔记

    这个“RabbittMQ软件,资料及笔记”压缩包可能包含了一系列关于RabbitMQ的学习资源,包括文档、教程、笔记等,旨在帮助用户深入理解和熟练掌握这一强大的中间件。 首先,让我们来了解一下RabbitMQ的核心概念和功能...

    RabbitMQ学习讲义

    【RabbitMQ学习讲义】 RabbitMQ是一个开源的消息队列系统,它基于高级消息队列协议(AMQP)实现,旨在提供可靠的、跨平台的消息传递。AMQP是一种应用程序层的开放标准,允许不同的系统、语言和应用之间进行无缝的...

    ericssonaxel.github.io:evm.com

    【描述】"帖子" 提示我们这个项目可能包含了一系列的文章或博客帖子,这些帖子可能涵盖了Erlang语言的学习笔记、EVM的内部工作原理、如何使用Erlang进行并发编程、Erlang在分布式系统中的应用,以及与SCSS(Sassy ...

    RabbitMQ自学笔记

    综上所述,通过本篇笔记的学习,读者可以全面掌握RabbitMQ的基本使用方法以及一些高级特性,这对于实际项目中的消息处理需求提供了强有力的支持。无论是简单的消息传输还是复杂的分布式系统架构设计,RabbitMQ都能...

    rabbitmq笔记及面试要点

    RabbitMQ作为一款广泛应用的消息中间件,它的核心价值在于实现消息队列的功能,有效地处理系统中的高并发和异步任务,从而提高系统的稳定性和响应速度。本文将详细探讨RabbitMQ的基本概念、工作机制以及面试中常见的...

    compsci390-plp

    "compsci390-plp" 是一个与计算机科学390课程相关的压缩包,主要涉及编程语言范例的学习。这门课程可能涵盖了多种编程语言的理论、设计和实现,旨在让学生深入理解编程语言的原理及其应用。课程的重点可能包括了如何...

    sample-elasticsearch-demo

    Dendron是一个知识管理工具,它支持Markdown格式,并提供了一种名为JSON Pod Export的功能,可以将Markdown笔记转换为JSON格式,以便与其他系统进行数据交换。在这个示例项目中,"sample-elasticsearch-demo-master...

    RabbitMQ.doc

    - Erlang是一种支持并发的编程语言,用于运行RabbitMQ。 - 配置环境变量`ERLANG_HOME`和`Path`。 - **安装RabbitMQ**: - 下载并安装RabbitMQ,注意版本兼容性。 - **安装插件**: - 在指定目录运行命令`...

Global site tag (gtag.js) - Google Analytics