Я вызываю lambda_B
22 раза (асинхронно) из lambda_A
, Одиночный lambda_B
вызов завершает выполнение за 3 секунды, поэтому в соответствии с этим, когда я вызываю 22 лямбды асинхронно, так что это должно занять около 3 секунд. Но это занимает 16-20 секунд
Вот пример кода, который я использую
async callingLambda(arrayvalue) {
try {
const lambdaResponse = await BPromise.all(
arrayvalue.map((leg) => {
return new BPromise((resolve, reject) => {
const FunctionName = 'Lambda_B';
lambda.invoke({
FunctionName: FunctionName,
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify(reqParmaters)
}, function(error, data) {
if (error) {
reject(error);
} else {
resolve(body.errors.length ? null : body.data);
}
});
});
})
);
return lambdaResponse;
} catch (error) {
return BPromise.reject(error);
}
}
Я мало наблюдал, что если я уменьшу количество вызовов до 4-6, то это займет около 3 секунд, но когда я увеличу количество вызовов, время также увеличится.
Согласно моим исследованиям, эта проблема может возникнуть из-за нет. операции ввода-вывода, обрабатываемой nodejs
параллельно, равен UV_THREADPOOL_SIZE
, а значение по умолчанию UV_THREADPOOL_SIZE
равно 4.
Я также увеличил размер UV_THREADPOOL_SIZE
, но он не работает.