zoukankan      html  css  js  c++  java
  • erlang的spawn函数

    问:

    1. spawn(fun() -> loop() end).
    2. spawn(loop()).
    语句1和2到底有什么区别? 2会阻塞,1不会, spawn到底是怎么执行的?? 过程能否说详细点.

    loop() ->
    receive
        ok -> ok, loop();
        stop -> stop
    end.

    答1:

    我也碰到这个问题,搜索到这个帖子,但2楼也没解释好。我找到原因了,写清楚一点,让以后的网友知道。

    要用: spawn(fun loop/0 end). 的形式才行。如果写 loop() ,机器会认为是:“loop()的返回值”,而不是一个函数名。

    等下,这又有个问题:如果loop函数是要有参数的函数,loop/1 显然也没法写参数,不能成功。所以spawn函数里写 fun() -> ff(X,Y,Z) end. 这形式是个好习惯。

    答2:

    erlang里面一切都是表达式,表达式肯定会有个计算结果,你表达式本身就阻塞了,调用它的就一直等着他返回结果,再spawn,而用fun的话直接返回#fun<>,并发一个进程出去等着表达式返回结果。明白这个道理就好了

  • 相关阅读:
    关于串联匹配电阻其作用:
    上下拉电阻
    RS232
    常用硬件介绍
    VGA
    JTAG
    [生活]-理财入门
    [Camera] color shading的产生
    [camere] AWB老算法
    Python基础语法知识
  • 原文地址:https://www.cnblogs.com/fvsfvs123/p/4181707.html
Copyright © 2011-2022 走看看