zoukankan      html  css  js  c++  java
  • [Erlang0013][OTHERS] reductions计数

    缘起坚强哥分享霸爷对于公平调度的解答。
     
    ===========================================================================
     
    如果函数A会调用函数B, 函数B每次调用都会递归3次。那么每调用一次函数A,是否就是4个reduction?
    到底是怎样自己动手测一下吧:
     
    先是不嵌套的
    Eshell V5.9  (abort with ^G)
    1> A = spawn(fun() -> one:start() end).
    <0.33.0>
    2> process_info(A, reductions).
    {reductions,46}
    3> process_info(A, reductions).
    {reductions,46}
    4> process_info(A, reductions).
    {reductions,46}
    5> process_info(A, reductions).
    {reductions,46}
    6> A!go.
    go
    7> process_info(A, reductions).
    {reductions,49}
     
     代码:
    -module(one).
    -compile(export_all).
     
    start() ->
        receive
            go ->
                aaa(3)
        end,
        receive
            stop ->
                ok
        end,
        ok.
     
    aaa(1) ->
        ok;
    aaa(N) ->
        aaa(N-1).
    ========================================================
    改为嵌套调用:
    1> A = spawn(fun() -> one:start() end).
    <0.33.0>
    2> process_info(A, reductions).
    {reductions,46}
    3> A!go.
    go
    4> process_info(A, reductions).
    {reductions,50}
     
    代码:
    -module(one).
    -compile(export_all).
     
    start() ->
        receive
            go ->
                    bbb()
        end,
        receive
            stop ->
                ok
        end,
        ok.
    bbb() ->
        aaa(3).
    aaa(1) ->
        ok;
    aaa(N) ->
        aaa(N-1).
     
    ===================================================
    receive会不会有影响呢?
    不会的。。。
     
    代码:
    -module(one).
    -compile(export_all).
     
    start() ->
        receive
            go ->
                    bbb()
        end,
        receive
            rec ->
                ok
        end,
        receive
            stop ->
                stop
        end,
        ok.
    bbb() ->
        aaa(3).
    aaa(1) ->
        ok;
    aaa(N) ->
        aaa(N-1).
     
    综上,reduction是函数调用,如果函数A会调用函数B, 函数B每次调用都会递归3次。那么每调用一次函数A,就是4个reduction。
     
  • 相关阅读:
    61. 最长不含重复字符的子字符串
    60. 礼物的最大价值 (未理解)
    59. 把数字翻译成字符串
    58. 把数组排成最小的数
    57. 数字序列中某一位的数字 (不懂)
    spring data jpa 官方文档
    idea 编译报错 源发行版 1.8 需要目标发行版 1.8
    idea maven 依赖报错 invalid classes root
    solr
    spring boot 官方文档
  • 原文地址:https://www.cnblogs.com/liangjingyang/p/2850748.html
Copyright © 2011-2022 走看看