Razones para usar API asincrónicas
La razón por la cual el concepto de asíncrono se hizo popular en Web2.0 es porque JavaScript se ejecuta en un solo hilo en el navegador, y también usa un hilo con representación de interfaz de usuario. Esto significa que la representación y las respuestas de la interfaz de usuario están en un estado estancado cuando se ejecuta JavaScript. Para una mejor experiencia del usuario, un enfoque asincrónico (por supuesto, este está en el llamado lenguaje de un solo subproceso) no bloquea el hilo principal y continúa respondiendo a las operaciones del usuario. Esto pertenece a la categoría de experiencia del usuario.
Del mismo modo, si los ingenieros con experiencia en otros idiomas, por supuesto, entienden que el cambio de CPU entre hilos requiere mucho tiempo (principalmente cambiar entre contextos y almacenamiento en caché), por lo que mejorar la eficiencia también es una razón para usar API asíncronas.
Por supuesto, estos no son absolutamente correctos, pero todos lo dicen. Porque si la sobrecarga de la creación de múltiples lecturas es menos que la ejecución paralela, entonces el método de múltiples lectura es la primera opción, que a menudo se considera una tarea de procesamiento intensiva en CPU.
En resumen, la IO asíncrona o la API asincrónica pueden considerarse como la característica del nodo, porque es una plataforma que aplica IO asincrónico en la capa de aplicación a gran escala, y se esfuerza por asignar recursos de manera más eficiente en un solo hilo.
Sobre la promesa
Aquí, este artículo no tiene la intención de explicar el uso de la promesa en detalle, sino que solo explica brevemente algunas de las API y el alcance de la prueba de la promesa:
// La función de Fs.ReadDir de combinación de NodeJ para crear un prometedor nativo promiseTask = new promise (function (resolve, rechazar) {fs.ReadDir ('/var/www', function (err, files) {if (! Err) {resolve (files);} else {rechazar (err);}}});}); promisetas es: '+archivos); PromiseTask.Catch (function (err) {console.log ('El error se informa como:'+err);});¿Cómo esperar a múltiples promesas para completar?
// Conecte el anterior PromiseTask.Then (function (files) {var readFilsePromiseList = files.map (function (file, index) {return new promise (function (resolve, rechazar) {fs.readFile (file, 'utf-8', function (err, str) {if (! Err) {resolve (str)} else {rechazar)});});});}); Promise.all (readFilsePromiseList);}). Entonces (function (filatrastarray) {console.log ('lectura de archivo llamado completado:'+filatrastarray);});Este código muestra la elegancia del desarrollo de NodeJS.
Entonces, ¿cuál es el problema?
El lenguaje más elegante en la actualidad aún se basa en el sistema operativo, es decir, las limitaciones del sistema aún existen:
No sé si este error se puede interpretar como manijas de operación de archivo agotadas, pero espero que pueda entender este artículo que el sistema operativo no puede abrir múltiples archivos ilimitados al mismo tiempo.
Y esto:
Esto es fácil de entender y la memoria está agotada. Por supuesto, el límite de memoria se puede ajustar agregando los siguientes dos parámetros de ejecución:
nodo --max antiguo-space-size = 8192 ./index.js #unit mb nodo --max-new-space-size = 2048 ./index.js #unit kb
Los parámetros anteriores entran en vigencia cuando V8 se inicializa y no se puede cambiar dinámicamente una vez que surtan efecto.
Muchas personas pueden proponer que estas dos limitaciones existen también en otros idiomas. Sí, también existen otros idiomas.
Sin embargo, los potentes GC o modelos de programación multiproceso en otros idiomas pueden permitir a los ingenieros liberarlos a tiempo después de solicitar recursos del sistema.
Aunque los recursos innecesarios del sistema se pueden publicar manualmente en NodeJS, ¿se pueden publicar cada operación en el programa de referencia a tiempo?
Por ejemplo, el paquete NodeJS Redis (NPM Install Redis) no proporciona métodos de operación de sincronización.
Esto significa que se necesita más control del proceso en el proceso de desarrollo. Desafortunadamente, los nodejs en un sistema de un solo subproceso no son buenos en esto, porque no hay un concepto de mecanismo de bloqueo múltiple, no de bloqueo, y es imposible incluir mecanismos semáforos en el sentido habitual. El resultado es que los ingenieros no saben cuándo liberar recursos manualmente.
A menos que tenga un control absoluto sobre su proyecto, no utiliza paquetes de terceros que usen API asíncronas.
Por lo tanto, la conclusión actual es que la promesa es solo una técnica de desarrollo. Comprender estos no es adecuado para todos los escenarios de desarrollo.
Resumir
Lo anterior se trata de la API asíncrona de nodo.js y sus limitaciones. Espero que este artículo sea útil para todos. Si tiene alguna pregunta, deje un mensaje para comunicarse.