【原创】调用 proc_lib:spawn/1 和 erlang:spawn/1 有什么区别
什么 区别 调用 原创 lib proc erlang
2023-09-14 08:59:46 时间
在《Erlang OTP 设计原则》中的 “Sys与Proc_Lib” 一节中有如下描述:
模块 proc_lib 中的函数可以用于实现一种特殊进程,遵照 OTP 设计原则,但不使用标准行为。它们也可以用于实现用户自定义的(非标准)行为。
怎样算是符合 OTP 设计原理而又不使用标准行为的 “特殊进程”呢?
以一种可以让进程放入监督树的方式启动; 支持 sys 的调试功能; 关注系统消息 。 什么是系统消息?
系统消息是用于监督树中的、带有特殊含义的消息。典型的系统消息有跟踪输出的请求、挂起和恢复进程执行的请求(用于发布处理中)。基于标准行为模式实现的进程会自动处理这些消息。
如何使用 proc_lib 中的函数创建进程?
用 proc_lib 模块中存在的若干函数来启动进程,例如异步启动的 spawn_link/3,4 以及同步启动的 start_link/3,4,5 。 使用这些函数中的任何一个启动的进程都会储存监督树所必须的信息。 当使用 proc_lib:start_link 以同步方式启动进程时,调用进程直到 proc_lib:init_ack 被调用后才返回,所以必须成对使用。 在 stdlib\src\proc_lib.erl 中有如下说明
?
可以看出,其比通常调用 erlang:spawn/1 会多出对祖先信息(Parent 和 Ancestors)和函数相关信息(module+name+arity)的处理,而这些信息是监督树所需要的。
Nodejs中process.cwd()与__dirname的区别 首先,上官方解释。 = process.cwd(): The process.cwd() method returns the current working directory of theNode.js process. 上面的意思就是,process.cwd()返回的是当前Node.js进程执行时的工作目录。
模块 proc_lib 中的函数可以用于实现一种特殊进程,遵照 OTP 设计原则,但不使用标准行为。它们也可以用于实现用户自定义的(非标准)行为。
怎样算是符合 OTP 设计原理而又不使用标准行为的 “特殊进程”呢?
以一种可以让进程放入监督树的方式启动; 支持 sys 的调试功能; 关注系统消息 。 什么是系统消息?
系统消息是用于监督树中的、带有特殊含义的消息。典型的系统消息有跟踪输出的请求、挂起和恢复进程执行的请求(用于发布处理中)。基于标准行为模式实现的进程会自动处理这些消息。
如何使用 proc_lib 中的函数创建进程?
用 proc_lib 模块中存在的若干函数来启动进程,例如异步启动的 spawn_link/3,4 以及同步启动的 start_link/3,4,5 。 使用这些函数中的任何一个启动的进程都会储存监督树所必须的信息。 当使用 proc_lib:start_link 以同步方式启动进程时,调用进程直到 proc_lib:init_ack 被调用后才返回,所以必须成对使用。 在 stdlib\src\proc_lib.erl 中有如下说明
?
可以看出,其比通常调用 erlang:spawn/1 会多出对祖先信息(Parent 和 Ancestors)和函数相关信息(module+name+arity)的处理,而这些信息是监督树所需要的。
Nodejs中process.cwd()与__dirname的区别 首先,上官方解释。 = process.cwd(): The process.cwd() method returns the current working directory of theNode.js process. 上面的意思就是,process.cwd()返回的是当前Node.js进程执行时的工作目录。
相关文章
- 什么是开放的云计算?
- asp.net发布后web.config里面的compilation的debug的值true和false有什么区别
- hibernate之saveorupdate()、save()、update()都有什么区别
- 数据挖掘能做点什么?
- 那些千奇百怪的视频直播延时测试方法,论正确姿势是什么?
- 【目标检测】YOLOv5模型从大变小,发生了什么?
- 什么是 Linux Foundation
- 二维码资料 目录 1. 二维码QR Code1 2. 发展历程1 3. 特点2 4. 存储3 5. 分类3 5.1.1. 按原理分3 6. 区别 与条码区别5 7. 什么是码制?
- Atitit orm的实现模式 data-mapper模式和active-record模式有什么区别
- react-native init MyProject之后发生了什么
- vue中attributes, methods ,events ,slots是什么意思?有什么区别?
- 云数据库与传统数据库有什么区别
- 什么是T-SQL
- 作为程序猿/媛的你在5.20这一天都干了什么???
- 因子分析法(Factor Analysis)是什么分析?
- 黑客和网络安全工程师之间有什么区别?如何成为一名网络安全工程师
- 持续测试与自动化测试的区别是什么?
- 接口测试经典面试题:Session、cookie、token有什么区别?
- 什么是死锁?如何解决死锁?【转载】
- C语言 宏定义的1<<0 与 直接定义1 有什么区别
- 和刚入门的菜鸟们聊聊--什么是聚簇索引与非聚簇索引
- 到底什么是跨域?如何解决跨域问题
- Hadoop与Spark是什么?
- 什么是防抖和节流?有什么区别?如何实现?
- 0基础入门测试该学什么?最全整理,照着学就对了