Me gustaría realizar 10 000 solicitudes HTTP simultáneas. Actualmente lo estoy haciendo usando Promise.all . Sin embargo, parece que tengo una tasa limitada de alguna manera, toma alrededor de 15-30 minutos completar las 10,000 solicitudes. ¿Hay algo en axios o en las solicitudes http en el nodo que me limita? ¿Cómo puedo aumentar el límite si hay uno?
const axios = require('axios'); function http_request(url) { return new Promise(async (resolve) => { await axios.get(url); // -- DO STUFF resolve(); }); } async function many_requests(num_requests) { let all_promises = []; for (let i = 0; i < num_requests; i++) { let url = 'https://someurl.com/' + i; let promise = http_request(url); all_promises.push(promise); } return Promise.all(all_promises); } async function run() { await many_requests(10000); } run();En Node.js hay dos tipos de subprocesos: un bucle de eventos (también conocido como bucle principal, subproceso principal, subproceso de eventos, etc.) y un grupo de trabajadores k en un grupo de trabajadores (también conocido como grupo de subprocesos).
...
El grupo de trabajadores de Node.js se implementa en libuv (docs), que expone una API de envío de tareas general.
El bucle de eventos se ejecuta en un subproceso, empuja las tareas al grupo de trabajadores k. Y estos trabajadores correrán en paralelo. El número predeterminado de trabajo en el grupo es 4. Puede configurar más.
El UV_THREADPOOLSIZE predeterminado es 4. Puede configurar UV_THREADPOOLSIZE como enlace. El límite depende del sistema operativo, debe verificar su sistema operativo: