node.js meteor node-fibers

node.js - ¿Por qué es meteor.js sincrónico?



node-fibers (2)

¿El código no recibe un impacto de eficiencia al ser síncrono? ¿Por qué la codificación es sincrónicamente una ganancia? Encontré estos dos enlaces haciendo algunas investigaciones: http://bjouhier.wordpress.com/2012/03/11/fibers-and-threads-in-node-js-what-for/ , https://github.com/Sage/streamlinejs/

Si el objetivo es evitar el código spaghetti, claramente puede tener un código asíncrono, por ejemplo con streamline.js, que no es una pirámide de devolución de llamada, ¿verdad?


Aquí hay que distinguir dos cosas:

  • Funciones síncronas como fs.readFileSync del nodo, fs.statSync , etc. Todas estas funciones tienen una Sync en sus nombres (*). Estas funciones son verdaderamente sincrónicas y de bloqueo . Si los llama, bloquea el bucle de eventos y mata el rendimiento del nodo. Solo debe usar estas funciones en el script de inicialización de su servidor (o en los scripts de línea de comandos).
  • Bibliotecas y herramientas como las fibras o streamline.js . Estas soluciones le permiten escribir su código en estilo sincronizado, pero el código que escriba con ellos se ejecutará de forma asíncrona . No bloquean el bucle de eventos.

(*) require también está bloqueando.

Meteor utiliza fibras . Su código está escrito en estilo sincronizado pero no es bloqueante.

La victoria no está en el lado del rendimiento (estas soluciones tienen su propia sobrecarga, por lo que pueden ser un poco más lentas, pero también pueden hacerlo mejor que las devoluciones de llamada sin procesar en patrones de código específicos como el almacenamiento en caché). La victoria, y la razón por la que se han desarrollado estas soluciones, está en el lado de la usabilidad: le permiten escribir su código en estilo sincronizado, incluso si está llamando a funciones asíncronas.

Edición del 25 de enero de 2017 : creé 3 gists para ilustrar las fibras no bloqueantes: fibers-does-not-block.js , fibers-sleep-sequential.js , fibers-sleep-parallel.js


El código no es "síncrono" cuando se usa algo como streamlinejs . El código real todavía se ejecutará de forma asíncrona . No es muy bonito escribir muchas funciones de devolución de llamadas anónimas, eso es lo que ayuda.