Actualmente uso el método async/await y eso es útil con las solicitudes https pero no ayuda con el código síncrono .
¿Qué puedo hacer para mejorar el rendimiento en ese caso?
¿Puedo usar algo como hilos de trabajo anidados?
¡Puedo usar subprocesos de trabajo en las últimas funciones, pero quiero poder usarlos en modo anidado !
¿Es posible hacer algo así en javascript/node.js o tengo que cambiar de idioma/plataforma ?
Ejemplo de código:
(async(){ /*Some code*/ let Items=[]; //Long array for(let Item in Items){ (async(){ /*Some code*/ let Items=[]; //Long array for(let Item in Items){ (async(){ //And so on ... })(); } /*Wait until all functions done*/ /*Some code*/ })(); } /*Wait until all functions done*/ /*Some code*/ })();La mejor respuesta hasta ahora: usar recursos compartidos entre subprocesos, ¡porque los subprocesos no pueden ejecutarse en modo anidado (haciendo un árbol/uno dentro del otro)!
Sí, el código puede usar algo como los subprocesos de trabajo de Node.js para permitir el paralelismo para el trabajo vinculado a la CPU.
Los trabajadores (subprocesos) son útiles para realizar operaciones de JavaScript con un uso intensivo de la CPU . No ayudan mucho con el trabajo intensivo de E/S. Las operaciones de E/S asincrónicas integradas de Node.js son más eficientes que los trabajadores.
El modelo de simultaneidad asíncrona todavía se usa y cada contexto de ejecución es de subproceso único .
Los subprocesos de trabajo se ejecutan en contextos de ejecución separados y, conceptualmente en el contexto de espera (por ejemplo, de contenedores de promesa en torno a los eventos), el uso de subprocesos de trabajo es un poco diferente al uso de XHR para enviar el procesamiento a servidores de cómputo remotos .
A diferencia del soporte multiproceso más directo en otros idiomas, esto también viene con la restricción de que los objetos no se comparten implícitamente entre la aplicación del nodo y los subprocesos de trabajo, ya que no se comparten en el trabajo XHR remoto. El código deberá escribirse para dividir los datos de manera adecuada y unir los resultados o, de lo contrario, ordenar a través de un recurso compartido (por ejemplo, sistema de archivos o SharedArrayBuffer).