Digamos que tenemos mucho más que un chunk de 64 kilobytes, así que realmente es el dato que fluye va más rápido. Así que tenemos una especie de clase de productor rápido para enviar un readable. Uso el método read y hago que el consumidor sea realmente lento. Así que aquí tenemos el consumidor más lento. Aquí quiero mostrarte nuevamente el uso de memoria de eso. Así que cuando lo ejecuto manualmente, lo siento, lo hemos ejecutado manualmente y cuando lo ejecuto de la manera incorrecta, así que esta es la manera incorrecta cuando no manejamos backpressure. Así que después de ejecutarlo, verás cuánta memoria toma y cómo no es eficiente porque si no manejamos backpressure, estamos como cancelando todo el efecto que strings tenía. Pero si lo ejecutamos en el modo manual, que sí maneja el backpressure, puedes ver cómo la memoria se mantiene plana y baja. Y esto es bastante asombroso porque estamos hablando del mismo archivo, la misma cantidad de memoria y datos. Pero mira lo que backpressure puede hacer a nuestra app si lo manejamos correctamente, en lugar de usar toda esta memoria.
Y si quieres llevar tus apps de bien y tal vez funcionen, tal vez no, e impredecibles, está bien tal vez para apps pequeñas. Pero si quieres llevarlo al siguiente nivel, que es lo que me estaba pasando, mira la principal diferencia. Y si estamos hablando de eficiencia, esto es un cambio de juego, al menos para mí. Así que pasemos por un ejemplo más. Como dije, si tengo un archivo CSV, bien, así que aquí está la manera ingenua cuando intento encontrar, digamos que tengo un archivo CSV con muchos ID y usuarios. Y quiero encontrar, digamos, el ID número 10, porque es Nueva York y queremos respetar el dinero de los giants, o para los Jetfans. Queremos decir, digamos, el ID de usuario de 10. Así que si tenemos millones de usuarios de la manera ingenua, necesitamos cargar todo el archivo mientras con los streams, podemos detenernos después de encontrar lo que necesitábamos.
Así que digamos que tenemos un pequeño archivo CSV de, no sé, como cinco megabytes, creo. Y ejecutamos este ejemplo. Puedes ver cómo el proceso de streams se detuvo después de 12 líneas con nueve milisegundos de ejecución. De la manera ingenua, es un total de 2,000 líneas en memoria, pero 15 milisegundos, no está tan mal. Pero cuando la ruta del archivo es un archivo mucho más grande, creo que aquí tenemos un archivo de 15 megabytes, creo. Y guardamos y lo ejecutamos. Puedes ver ahora, esto estaba tomando 13 milisegundos. Y aquí, 77. Y puedes ver cómo la memoria va y crece de la manera ingenua, y cómo se mantiene estable, porque después de encontrar lo que necesitábamos, podemos acceder a ello desde el código. Y si hacemos un archivo de un gigabyte, y la parte asombrosa, que nuestra app se bloqueó porque usamos más memoria de la que realmente teníamos. Así que esta es también una manera muy útil de cómo hacerlo. Y lo último que quiero mostrarte es la diferencia entre pipe y pipeline.
Comments