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<>,并发一个进程出去等着表达式返回结果。明白这个道理就好了
erlang的spawn函数的更多相关文章
- Erlang类型及函数声明规格
http://erlangdisplay.iteye.com/blog/404570 Erlang类型及函数声明规格 Author: Mail: Date: Copyright: litaocheng ...
- Erlang高阶函数
对于函数式语言来说,函数也想普通的数据类型一样无处不在.函数即可以当成参数进行传递,也可以当成函数的返回值.当我第一次学习函数式编程的时候,我被这样的写法弄的头昏脑涨.下面我举例说明下(例子摘录自Le ...
- erlang lists模块函数使用大全
转自:http://qqdenghaigui.iteye.com/blog/1554541 一,带函数Pred1, all(Pred, List) -> boolean()如果List中的每个元 ...
- spawn函数的实现(前文自动执行器的翻版)
function spawn(genF) { return new Promise(function(resolve, reject) { const gen = genF(); function s ...
- erlang判断模块导出函数问题
erlang本身提供一个接口,可以用来检查模块是否有导出函数,这个接口是erlang:function_exported/3,但是很多时候这个接口无法正常使用. 下面重现一下这个问题: 1> e ...
- Erlang那些事儿第3回之我是函数(fun),万物之源MFA
Erlang代码到处都是模式匹配,这把屠龙刀可是Erlang的看家本领.独家绝学,之前在<Erlang那些事儿第1回之我是变量,一次赋值永不改变>文章提到过,Erlang一切皆是模式匹配. ...
- Erlang初学
这篇文章主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程.一切都是常量.轻量进程.进程端口映射及典型缺点等内容,需要的朋友可以参考下 我对 Erlang 编程理念 ...
- Erlang语言介绍
Erlang (/ˈɜrlæŋ/ er-lang) is a general-purpose concurrent, garbage-collected programming language an ...
- Erlang Concurrent 并发进阶
写在前面的话 本文来源于官方教程 Erlang -- Concurrent Programming.虽然没有逻辑上的关系,但建议在掌握了Erlang入门系列教程的一些前置知识后继续阅读. 之前我是逐小 ...
随机推荐
- Flask项目之手机端租房网站的实战开发(七)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...
- 洛谷 P3131 [USACO16JAN]子共七Subsequences Summing to Sevens
P3131 [USACO16JAN]子共七Subsequences Summing to Sevens 题目描述 Farmer John's NN cows are standing in a row ...
- java中volatile关键字的含义--volatile并不能做到线程安全
在Java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- echarts3.0 仪表盘实例更改完成占用率实例
需要完成的项目效果 官方实例效果 基本思路: 首先引入jquery和echarts3.0库. 需要两个仪表盘,一个仪表盘是纯色灰色,在底部.startAngle 和endAngle永远是最大值,默认为 ...
- JS学习笔记 - 普通选项卡(面向过程)
疑问: 1. getElementsByTagName 和 getElementsByClassName 的区别? 分别在什么应用场景? <!DOCTYPE html> <h ...
- Ab工具基本使用
Ab简介 ab是apache自带的压力测试工具,ab是apachebench命令的缩写. ab不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试. ab是一个ht ...
- 【CS Round #48 (Div. 2 only)】8 Divisible
[链接]h在这里写链接 [题意] 给你一个长度为n的数字(n<=1000) 然后让你任意组合这个数字. 使得这个数字能被8整除. (不能出现前导0) [题解] 只要后三位能被8整除就可以了. 则 ...
- Virtualizing memory type
A processor, capable of operation in a host machine, including memory management logic to support a ...
- PS中矢量形状图层的合并交叉等运算
操作中将用到下图所示的几个按钮 图1.2 减去顶层形状图层为例 1. 上图中,选择矩形工具,以新建图层的形式,新建两个矩形的形状图层,如上右图. PS:可以Shift+A快捷键选中一个形状,然后填 ...
- Eclipse 出错 Error:Could not create the Java Virtual Machine Error:A fatal exception has occurred
提示如下: scala compile server. error:could not create the java machine.Error: A fatal exception has occ ...