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 是不好的做法。
我正在用 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 是不好的做法。