¡NO! No has aprendido mal que JavaScript es un lenguaje de un solo subproceso. Es un lenguaje de subproceso único, tiene acceso a un único subproceso principal para ejecutar el código. Entonces, cuando hablamos de programación sincrónica, estamos hablando de este hilo solitario que hace todo el trabajo pesado y ejecuta nuestro código.
Pero en realidad el motor V8 y Node.js usan una biblioteca C llamada libuv para obtener acceso a seis subprocesos adicionales. Dos de ellos se usan para realizar recolección de basura y el resto se usan para realizar tareas en segundo plano, como programación asincrónica.
Sí. Cuando decimos que el código es asincrónico o no bloqueante, lo que realmente sucede es que el código asincrónico se pasa a estos subprocesos adicionales con la devolución de llamada y el subproceso principal continúa haciendo su trabajo sin bloquear el resto del código.
Cuando finaliza el código asíncrono, la función de devolución de llamada se envía a la cola de eventos con el error o los datos requeridos. Luego, el bucle de eventos lo empuja a la pila de llamadas y boom, obtenemos nuestro resultado, para entender esto con algo de código. Veamos el método readfile del módulo fs.
fs.readFile("demo.text","utf8",(err,data)=>{ if(error){ return error } console.log("output",data); })
En el código anterior, el método readfile se pasa a los subprocesos en segundo plano. La lectura se realiza en segundo plano y, cuando finaliza, la devolución de llamada se envía a la cola de eventos con error o datos.
Una vez en la pila de llamadas, se ejecuta la devolución de llamada y nos queda el error o los datos como salida.
Gracias por leer. Espero haber podido explicar sobre los medios de subproceso único en Javascript.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3