代码之家  ›  专栏  ›  技术社区  ›  Alexandre Senges

异步/等待会大大降低性能

  •  -1
  • Alexandre Senges  · 技术社区  · 7 年前

    我用Node.js写了一个C++插件,我做了一个异步函数,我尝试了一个回调和一个承诺。执行回调需要300到1000毫秒之间的时间,而相同的工作需要1800到5000毫秒之间的时间。

    该插件使用最小极大值算法和马尔可夫决策过程来决定在ConnectFour游戏中进行的移动。代码如下:

    回调:

    socket.on('play', row => {
        console.time('play');
        play(socket, Game, row);
        Game.minimax(AImove => {
            play(socket, Game, AImove - 1);
            console.timeEnd('play');
        });
     });
    /*
    *  play: 1170.922ms
    *  play: 984.421ms
    *  play: 1324.559ms
    *  play: 1147.240ms
    */
    

    异步/等待:

    const minimax = Game => {
      return new Promise(resolve => {
        Game.minimax(AImove => {
          resolve(AImove);
        });
      });
    };
    
    socket.on('play', async row => {
        console.time('play');
        play(socket, Game, row);
        const AImove = await minimax(Game);
        play(socket, Game, AImove - 1);
        console.timeEnd('play');
      });
    /*
    *  play: 1838.339ms
    *  play: 3204.243ms
    *  play: 3245.432ms
    *  play: 4590.880ms
    */
    

    我玩了完全相同的动作序列,用一个节点插件写异步/等待是一个坏做法吗?或者我做错什么了?

    1 回复  |  直到 7 年前
        1
  •  1
  •   miles_b    7 年前

    通常,当我看到一个Promise或Async函数需要很长时间才能执行时,这是因为函数在末尾没有返回值。它将在函数结束时运行,而不会返回,只会超时。此外,嵌套承诺是不好的做法。

    推荐文章