`
mryufeng
  • 浏览: 977464 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

group_leader的设计和用途

阅读更多
一直对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执行的命令 就是想在目标机器上显示结果 但是看不到 因为被截获了。


4
1
分享到:
评论
4 楼 mryufeng 2009-03-08  
今天才明白group_leader的伟大了 没有它  erlang的大部分分布功能无法实现!
3 楼 Arbow 2008-11-23  
可以做集中式的日志汇总阿...
2 楼 mryufeng 2008-11-21  
erlang里面的这些东西很多都是最佳实践出来的 特性都比较实用。
1 楼 dennis_zane 2008-11-21  
老大研究的很深入啊

相关推荐

    【GROUP_CONCAT】使用之MySQL官方文档翻译

    ### GROUP_CONCAT 函数详解 #### 一、概述 `GROUP_CONCAT` 是 MySQL 中一个非常实用的聚合函数,主要用于将来自同一分组的多个值连接成一个字符串。这一功能在许多场景下都非常有用,例如汇总数据、创建列表等。 ...

    综合约束命令group_path的理解

    dc综合中group_path的理解。

    group_concatenate与locate的联合用法示例

    在SQL查询中,`GROUP_CONCAT` 和 `LOCATE` 是两个非常实用的函数,它们分别用于处理分组数据的聚合和字符串定位。本篇文章将详细介绍这两个函数的用途以及它们如何联合使用,以帮助你更好地理解和应用在实际的数据库...

    当数据库复杂查询执行顺序与编写顺序原理及sql案例:同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序

    当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法

    如何修改Mysql中group_concat的长度限制

    `GROUP_CONCAT`函数还支持一些额外的选项,使得其更加强大和灵活: - **指定分隔符**:你可以自定义分隔符,例如使用下划线 `_`: ```sql SELECT GROUP_CONCAT(f_a SEPARATOR '_') FROM t_one GROUP BY f_b; ```...

    MySQL GROUP_CONCAT限制解决方案

     GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即”,” ,  如果需要自定义分隔符可以使用 SEPARATOR  如: SELECT GROUP_CONCAT(name SEPARATOR '_') FROM user 限制:  GROUP_CONCAT...

    PyPI 官网下载 | gg_group_setup-0.3.6.tar.gz

    标签列出了"zookeeper"、"分布式"、"云原生"以及"Python库",这为我们提供了关于`gg_group_setup`库功能和用途的关键线索。`Zookeeper`是Apache的一个开源项目,常用于分布式系统的协调服务,例如管理配置信息、命名...

    MySql版本问题sql_mode=only_full_group_by的完美解决方案

    总的来说,`sql_mode=only_full_group_by`的解决方案不仅涉及技术操作,还涉及到对SQL标准的理解和代码质量的提升。正确处理这一问题有助于提高代码的健壮性和数据库的稳定性。在实际应用中,应结合业务需求和数据库...

    MySQL统计函数GROUP_CONCAT使用陷阱分析

    MySQL中的GROUP_CONCAT函数是一个非常实用的统计函数,它允许我们合并特定列的值,并以指定的分隔符连接它们。然而,在某些情况下,如果不注意,可能会遇到一些使用陷阱,导致数据被截断或者出现警告。本文将深入...

    dispatch_group包含wait包含forever时长

    两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都...

    mysql中GROUP_CONCAT的使用方法实例分析

    在MySQL中,`GROUP_CONCAT` 是一个非常...理解并熟练运用`GROUP_CONCAT`,可以帮助我们编写出更加高效和简洁的SQL查询。在实际操作中,根据具体需求灵活调整`GROUP_CONCAT`的使用方式,可以大大提高数据处理的效率。

    MySQL中group_concat函数深入理解

    MySQL中的`GROUP_CONCAT`函数是一个非常实用的聚合函数,它允许你在分组查询中将一组行的某个列值合并成一个字符串,每个值之间由指定的分隔符隔开。这个函数对于数据汇总和报告生成特别有用,因为它可以把多行数据...

    Mysql的GROUP_CONCAT()函数使用方法

    MySQL中的GROUP_CONCAT()函数是一个非常实用的聚合函数,它允许你在分组查询时将同一组内的多个值合并成一个字符串。此函数主要用于数据分析和报表生成,尤其在处理多对多关系的数据时,能简化数据处理流程。在本文...

    SqlServer GroupConcat

    `SqlServer GroupConcat`的CLR实现是为了解决SQL Server中缺乏类似MySQL `GROUP_CONCAT`功能的问题。CLR(Common Language Runtime)是.NET框架的一部分,允许开发者使用各种编程语言(如C#、VB.NET等)编写存储过程...

    GROUP_CONCAT的用法

    GROUP_CONCAT 函数的用法和应用 GROUP_CONCAT 函数是 MySQL 数据库中一个非常有用的聚合函数,它可以将一个分组中的值连接起来,返回一个字符串结果。下面我们将详细介绍 GROUP_CONCAT 函数的用法和应用。 GROUP_...

    Group_by详解_完美例句

    【Group_by 详解】 在数据库查询中,`GROUP BY`语句是一个至关重要的部分,它允许用户根据指定的字段或表达式对数据进行分组,以便进行聚合计算或按组进行分析。`GROUP BY`的基本概念是将具有相同字段值的数据行...

    Python库 | salling_group_holidays-0.4-py3-none-any.whl

    总结,salling_group_holidays库为Python开发者提供了一个高效、便捷的方式来获取和处理Salling Group的假期信息,无论是进行零售业务的规划,还是进行数据分析,都能发挥重要作用。通过深入理解和合理使用,可以...

    解决MySQL 5.7.9版本sql_mode=only_full_group_by问题

    `ONLY_FULL_GROUP_BY`模式是MySQL为了符合SQL标准而引入的,虽然这可能导致一些兼容性问题,但其目的是提高查询的规范性和一致性。因此,理解并适应这种变化对于编写健壮的SQL代码至关重要。如果你的代码需要在多种...

    Python库 | group_based_policy-6.0.0-py2-none-any.whl

    group_based_policy库可能包含了一些核心类,如GroupPolicy,它可能用于定义和管理用户组的权限;还有可能包含了一些辅助函数,用于处理用户、角色和权限的关系。 在实际应用中,这类库可能会被集成到Web应用程序、...

Global site tag (gtag.js) - Google Analytics