一直对erlang的group_leader这个概念很困惑,因为*nix系统也有类似的名词但是只是和进程组管理有关系。查了很多文档才知道,erlang的group_leader的设计意图和作用,解释如下:
先看下着段代码运作:
log_group_leader(OGL) ->
receive Msg ->
io:format(user, "Got message ~p~n",[Msg]),
OGL ! Msg,
log_group_leader(OGL)
end.
ioclient(NGL) ->
group_leader(NGL, self()),
io:format("Hello World~n"),
io:format("Hello again~n").
iotest() ->
OldGroupLeader = group_leader(),
NewGroupLeader = spawn(?MODULE, log_group_leader, [OldGroupLeader]),
spawn(?MODULE, ioclient, [NewGroupLeader]).
说白了group_leader就是决定erlang的io控制台的输出到那个进程。
这个特性很有帮助。我们在做服务器程序的时候 会有大量的诊断信息通过类似printf打印需要输出到控制台查看。 代码里东一块西一块都是诊断代码, 而且一旦程序调试完毕 我们可能不在需要这些信息污染环境。这个是单机的情况,对于分布式的情况就更复杂,很难把其他主机上打出的诊断信息汇总到一个地方集中查看。
group_leader就是解决这个问题的。 erlang里面的io:format之类的函数执行的时候最早输出会被重定向到该进程的group_leader进程去,而且进程是位置无关的,也就是说在其他主机上的信息都可以汇总。
有了这个特性 比如说我在其他的机器上执行条rpc命令 这个命令的结果是会被截获 传送回来的 而不是要到目标主机的终端上显示。
group_leader是继承的,每当spawn一个进程的时候,会自动继承父进程的这个属性。rpc的实现上也很大努力保证了这个语义不变。
在实践中也要注意这个特性的副作用,就是: 你用rpc执行的命令 就是想在目标机器上显示结果 但是看不到 因为被截获了。
分享到:
相关推荐
### GROUP_CONCAT 函数详解 #### 一、概述 `GROUP_CONCAT` 是 MySQL 中一个非常实用的聚合函数,主要用于将来自同一分组的多个值连接成一个字符串。这一功能在许多场景下都非常有用,例如汇总数据、创建列表等。 ...
dc综合中group_path的理解。
在SQL查询中,`GROUP_CONCAT` 和 `LOCATE` 是两个非常实用的函数,它们分别用于处理分组数据的聚合和字符串定位。本篇文章将详细介绍这两个函数的用途以及它们如何联合使用,以帮助你更好地理解和应用在实际的数据库...
当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
`GROUP_CONCAT`函数还支持一些额外的选项,使得其更加强大和灵活: - **指定分隔符**:你可以自定义分隔符,例如使用下划线 `_`: ```sql SELECT GROUP_CONCAT(f_a SEPARATOR '_') FROM t_one GROUP BY f_b; ```...
GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即”,” , 如果需要自定义分隔符可以使用 SEPARATOR 如: SELECT GROUP_CONCAT(name SEPARATOR '_') FROM user 限制: GROUP_CONCAT...
标签列出了"zookeeper"、"分布式"、"云原生"以及"Python库",这为我们提供了关于`gg_group_setup`库功能和用途的关键线索。`Zookeeper`是Apache的一个开源项目,常用于分布式系统的协调服务,例如管理配置信息、命名...
MySQL中的GROUP_CONCAT函数是一个非常实用的统计函数,它允许我们合并特定列的值,并以指定的分隔符连接它们。然而,在某些情况下,如果不注意,可能会遇到一些使用陷阱,导致数据被截断或者出现警告。本文将深入...
总的来说,`sql_mode=only_full_group_by`的解决方案不仅涉及技术操作,还涉及到对SQL标准的理解和代码质量的提升。正确处理这一问题有助于提高代码的健壮性和数据库的稳定性。在实际应用中,应结合业务需求和数据库...
两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都...
在MySQL中,`GROUP_CONCAT` 是一个非常...理解并熟练运用`GROUP_CONCAT`,可以帮助我们编写出更加高效和简洁的SQL查询。在实际操作中,根据具体需求灵活调整`GROUP_CONCAT`的使用方式,可以大大提高数据处理的效率。
MySQL中的`GROUP_CONCAT`函数是一个非常实用的聚合函数,它允许你在分组查询中将一组行的某个列值合并成一个字符串,每个值之间由指定的分隔符隔开。这个函数对于数据汇总和报告生成特别有用,因为它可以把多行数据...
MySQL中的GROUP_CONCAT()函数是一个非常实用的聚合函数,它允许你在分组查询时将同一组内的多个值合并成一个字符串。此函数主要用于数据分析和报表生成,尤其在处理多对多关系的数据时,能简化数据处理流程。在本文...
GROUP_CONCAT 函数的用法和应用 GROUP_CONCAT 函数是 MySQL 数据库中一个非常有用的聚合函数,它可以将一个分组中的值连接起来,返回一个字符串结果。下面我们将详细介绍 GROUP_CONCAT 函数的用法和应用。 GROUP_...
`SqlServer GroupConcat`的CLR实现是为了解决SQL Server中缺乏类似MySQL `GROUP_CONCAT`功能的问题。CLR(Common Language Runtime)是.NET框架的一部分,允许开发者使用各种编程语言(如C#、VB.NET等)编写存储过程...
【Group_by 详解】 在数据库查询中,`GROUP BY`语句是一个至关重要的部分,它允许用户根据指定的字段或表达式对数据进行分组,以便进行聚合计算或按组进行分析。`GROUP BY`的基本概念是将具有相同字段值的数据行...
总结,salling_group_holidays库为Python开发者提供了一个高效、便捷的方式来获取和处理Salling Group的假期信息,无论是进行零售业务的规划,还是进行数据分析,都能发挥重要作用。通过深入理解和合理使用,可以...
`ONLY_FULL_GROUP_BY`模式是MySQL为了符合SQL标准而引入的,虽然这可能导致一些兼容性问题,但其目的是提高查询的规范性和一致性。因此,理解并适应这种变化对于编写健壮的SQL代码至关重要。如果你的代码需要在多种...