Correcta forma de escribir una función no bloqueada en node.js
El paradigma sin bloqueo es crucial en node.js para lograr un alto rendimiento. Sin embargo, puede ser un desafío escribir funciones verdaderamente no bloqueadas que no impidan el progreso del bucle del evento.
comprender el comportamiento sin bloqueo
El código de envoltura en una promesa no lo hace inherentemente sin bloqueo. La función del ejecutor de promesa se ejecuta sincrónicamente, lo que significa que el código de larga duración dentro de ella bloqueará la ejecución de otras operaciones.
Ejemplo: Función de bloqueo de promesa-Wrawpped
Considere la siguiente función:
Función LongRunchfunc (val) return new Promise ((resolve, rechazar) => { Sum = 0; para (dejar i = 0; i function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { let sum = 0; for (let i = 0; i Mientras esta función devuelve una promesa, el código dentro del ejecutor está bloqueando. El bucle de eventos esperará hasta que este código se complete antes de ejecutar otras operaciones.
Simulando AsynChronicity con setTimeout
un enfoque para emular el comportamiento no bloqueado en este caso es usar setTimeout:longRunningfunc (val, mod) { return new Promise ((resolve, rechazar) => { setTimeOut (() => { Sum = 0; para (dejar i = 0; i function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { let sum = 0; for (let i = 0; i Este código programa el bucle de larga duración para ejecutar después de un retraso de 10 milisegundos. Sin embargo, todavía está bloqueando dentro de ese período de ejecución retrasado.
verdadero enfoques sin bloqueo
para crear verdaderas funciones sin bloqueo, necesita usar técnicas que muevan el código ejecutivo de código principal. Tareas de larga duración.
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