Erlang 有没有好的方法来描述大减量的过程?

Erlang 有没有好的方法来描述大减量的过程?,erlang,Erlang,我发现在我们的产品环境中,流程减少的幅度很大,而且消息没有减少 仅供参考,5分钟后,减少量为10831243888178,然后是10838818431635。根据缩减,消息队列长度是1012,然后是1014 我认为从process\u info(Pid)返回的消息应该在5分钟内被消耗掉,但事实并非如此。我可以说这个过程被一些消息阻止了吗 我从网上读到,一次缩减可以看作一次函数调用,但我并不完全理解。如果有人能告诉我更多关于“减少”的信息,我将不胜感激。减少是衡量流程所做工作的一种方法 每一个计划

我发现在我们的产品环境中,流程减少的幅度很大,而且消息没有减少

仅供参考,5分钟后,减少量为10831243888178,然后是10838818431635。根据缩减,消息队列长度是1012,然后是1014

我认为从
process\u info(Pid)
返回的
消息应该在5分钟内被消耗掉,但事实并非如此。我可以说这个过程被一些消息阻止了吗


我从网上读到,一次缩减可以看作一次函数调用,但我并不完全理解。如果有人能告诉我更多关于“减少”的信息,我将不胜感激。减少是衡量流程所做工作的一种方法

每一个计划的进程在抢占之前,即在它不得不让其他进程执行之前,都有一定数量的开销缩减。调用一个函数将花费1个缩减,这似乎是正确的,但这不是花费它们的唯一原因,很多缩减也将在这个函数调用中消失

您给出的数字似乎是一个过程所花费的累积减少量。一个大数字本身并不意味着什么。然而,一个大的增长意味着这个过程正在做一些艰苦的工作。如果这台机器没有消耗消息队列,那么它很有可能被困在一个很长的、甚至是无休止的计算中


您可以尝试使用
process\u info(Pid,current\u function)
process\u info(Pid,current\u stacktrace)
减少量是衡量流程所做工作的一种方法

每一个计划的进程在抢占之前,即在它不得不让其他进程执行之前,都有一定数量的开销缩减。调用一个函数将花费1个缩减,这似乎是正确的,但这不是花费它们的唯一原因,很多缩减也将在这个函数调用中消失

您给出的数字似乎是一个过程所花费的累积减少量。一个大数字本身并不意味着什么。然而,一个大的增长意味着这个过程正在做一些艰苦的工作。如果这台机器没有消耗消息队列,那么它很有可能被困在一个很长的、甚至是无休止的计算中


您可以尝试使用
process\u info(Pid,current\u function)
process\u info(Pid,current\u stacktrace)

进一步检查它,您如何知道它没有使用(部分)消息队列,并且新的消息尚未到达?@rvirding,因为以前的消息总是在消息队列中。我可以假设根据FIFO原则,消息应该一个接一个地被消费吗?看到Erlang有一个选择性的
receive
,没有必要按照消息到达的顺序消费消息,因此您不能仅仅假设它们将/应该/已经按顺序被消费。这取决于
receive
s.@rvirding谢谢。
gen\u server
行为是否也取决于同一回调方法中的选择性
receive
s,如
handle\u cast
?否,当使用像
gen\u server
这样的行为时,您会失去对消息处理的一些控制。有一个顶级的
receive,它接收每一条消息并调用相应的回调函数,或者在内部处理系统消息。当然,您可以在回拨中进行发送和选择性接收,但必须小心不要接收系统消息。使用行为请求,如
gen_server:call
是安全的。您如何知道它没有使用(部分)其消息队列,而新的消息尚未到达?@rvirding,因为以前的消息始终存在于消息队列中。我可以假设根据FIFO原则,消息应该一个接一个地被消费吗?看到Erlang有一个选择性的
receive
,没有必要按照消息到达的顺序消费消息,因此您不能仅仅假设它们将/应该/已经按顺序被消费。这取决于
receive
s.@rvirding谢谢。
gen\u server
行为是否也取决于同一回调方法中的选择性
receive
s,如
handle\u cast
?否,当使用像
gen\u server
这样的行为时,您会失去对消息处理的一些控制。有一个顶级的receive,它接收每一条消息并调用相应的回调函数,或者在内部处理系统消息。当然,您可以在回拨中进行发送和选择性接收,但必须小心不要接收系统消息。使用行为请求,如
gen_server:call
是安全的。感谢您的解释。我会试试这些方法。谢谢你的解释。我会试试这些方法。