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入门系列教程的一些前置知识后继续阅读. 之前我是逐小 ... 
随机推荐
- JS contcat() 连接数组 函数
			语法: arrayObject.concat(arrayX,arrayX,......,arrayX) 1.把元素添加到数组中 arr.concat(a,b,c);2.把数组连起来 arr.conca ... 
- BZOJ——3343: 教主的魔法  ||  洛谷—— P2801 教主的魔法
			http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ... 
- iOS 之应用性能调优的25个建议和技巧
			注意:每在优化代码之前,你都要注意一个问题,不要养成"预优化"代码的错误习惯. 时常使用Instruments去profile你的代码来发现须要提升的方面.Matt Gallowa ... 
- amazeui学习笔记--css(常用组件1)--小徽章Badge
			amazeui学习笔记--css(常用组件1)--小徽章Badge 一.总结 1.am-badge:添加am-badge来声明小徽章对象 <span class="am-badge a ... 
- 重新启动IIS不重启电脑
			有时候我们在WEB程序如:ASP,中无意中使用到了一个死循环,或者在测试 DLL组件时,挂了.这时候IIS就停止了响应,我们要继续我们的工作啊,重启IIS服务吧. 然而这个进程还在执行,Inter ... 
- 应用Python来计算排列中的逆序数个数
			在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数.一个排列中所有逆序总数叫做这个排列的逆序数.也就是说,对于 ... 
- 【Codeforces Round #445 (Div. 2) D】Restoration of string
			[链接] 我是链接,点我呀:) [题意] 给你n个字符串. 让你构造一个字符串s. 使得这n个字符串. 每个字符串都是s的子串. 且都是出现次数最多的子串. 要求s的长度最短,且s的字典序最小. [题 ... 
- [D3] Build a Column Chart with D3 v4
			Column and bar charts are staples of every visualization library. They also make a great project for ... 
- Nginx- 实现跨域访问
			https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80688740 
- [Angular2 Router] Preload lzay loading modules
			From router v3.1.0, we have preloading system with router. PreloadAllModules After the init module l ... 
