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