使用ASYNC / AWAIT会大大降低性能

时间:2019-01-14 21:53:28

标签: node.js-addon

我正在用Node.js编写C ++插件,并创建了一个异步函数,并通过回调和Promise进行了尝试。回调需要300毫秒至1000毫秒才能执行,而Promise则需要1800毫秒至5000毫秒才能完成相同的工作。

该插件将Minm​​ax算法与马尔可夫决策过程一起使用,以决定在连接四局游戏中的棋步。代码如下:

回调:

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
*/

ASYNC / AWAIT:

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
*/

我演奏了完全相同的动作序列,使用带有节点插件的ASYNC / AWAIT是一种不好的做法吗?还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

通常,当我看到Promise或异步函数需要很长时间才能执行时,这是因为该函数最后没有返回任何值。它将在函数末尾运行,而不会返回任何结果,只是超时。另外,嵌套Promises是不好的做法。