¿Cómo logran la asincronía las funciones integradas de NodeJS?
¿Puedo escribir mis propias funciones asincrónicas personalizadas que se ejecutan fuera del hilo principal? ¿O tengo que aprovechar las funciones integradas?
Javascript es mono-hilo, si desea crear un 'hilo', puede usar https://nodejs.org/api/worker_threads.html .
Pero es posible que haya oído hablar de la función asíncrona y las promesas en javascript, la función asíncrona devuelve una promesa de forma predeterminada y la promesa NO es un hilo. Puede crear una función asíncrona como esta:
async function toto() { return 0; } toto().then((d) => console.log(d)); console.log('hello');Aquí mostrará hola, luego 0, pero recuerde que incluso .then() se ejecutará después de que sea una promesa, por lo que no se ejecutará en paralelo, solo se ejecutará más tarde.
Solo una nota al margen, true asynchronous realmente no significa nada. Pero podemos suponer que te refieres al paralelismo?.
Ahora, dependiendo de lo que esté haciendo, es posible que encuentre que hay poco o ningún beneficio en el uso de subprocesos en node. Tomemos, por ejemplo: el sistema de archivos de los nodos, siempre que no use las versiones de sincronización, ejecutará automáticamente varias solicitudes en paralelo, porque el nodo simplemente pasará estas solicitudes a los subprocesos de trabajo.
Es la razón por la que la gente dice que Node tiene un solo subproceso, en realidad es incorrecto, es solo el motor JS. Incluso puede probar esto observando la cantidad de subprocesos que toma un proceso de nodeJs utilizando el monitor de procesos de su elección.
Entonces, podría preguntarse, ¿por qué tenemos subprocesos de trabajo en el nodo? Bueno, el motor V8 JS que usa el nodo es bastante rápido en estos días, así que digamos que desea calcular PI a un millón de dígitos usando JS, podría hacerlo en el hilo principal sin bloquear. Pero sería una pena no usar esos núcleos de CPU adicionales que tienen las PC modernas y mantener el hilo principal haciendo otras cosas mientras se calcula el PI dentro de otro hilo.
Entonces, ¿qué pasa con File IO en el nodo? ¿Estaría este beneficio en un subproceso de trabajo? Bueno, esto depende de lo que haga con el resultado del file-io, si solo estaba leyendo y luego escribiendo bloques de datos, entonces no hay no sería ningún beneficio, pero si dice que estaba leyendo un archivo y luego haciendo algunos cálculos pesados en estos archivos con Javascript (por ejemplo, alguna compresión de imagen personalizada, etc.), entonces nuevamente un subproceso de trabajo ayudaría.
Entonces, en pocas palabras, los subprocesos de trabajo son excelentes cuando necesita usar Javascript para algunos cálculos pesados, usarlos solo para IO simple, de hecho, puede ralentizar las cosas, debido a los gastos generales de IPC.
No menciona en su pregunta qué está tratando de ejecutar en paralelo, por lo que es difícil decir si hacerlo sería beneficioso.