ASYNC/AWAIT 性能大幅下降

Huge performance decrease with ASYNC/AWAIT

我正在用 Node.js 编写一个 C++ 插件,我做了一个异步函数,我用回调和 Promise 尝试了它。回调执行时间在 300 毫秒到 1000 毫秒之间,而对于相同的工作,Promise 执行时间在 1800 毫秒到 5000 毫秒之间。

该插件使用 Minmax 算法和马尔可夫决策过程来决定玩四连棋游戏的一步。代码如下:

回调:

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 是一种不好的做法吗?还是我做错了什么?

通常当我看到一个 Promise 或一个异步函数需要很长时间才能执行时,这是因为该函数最后没有 return 值。它会 运行 直到函数结束,而不会遇到 return,只是超时。此外,嵌套 Promises 是不好的做法。