Я пишу аддон C ++ с Node.js, и я сделал асинхронную функцию, я попробовал это с обратным вызовом и с 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
*/
АСИНХРОННЫЙ / ЖДУТ:
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 с аддоном узла Или я что-то не так сделал?