Hace 6 años | Por mr_b a medium.com
Publicado hace 6 años por mr_b a medium.com

Hace algún tiempo me surgió un problema en el trabajo donde tenía que comparar dos archivos descargados. La solución fue simple: descargar el primero archivo, descargar el segundo para finalmente ejecutar un diff entre ellos. Tres pasos: curl URL1 > file1; curl URL2 > file2; diff file1 file2. Pero antes de poder teclearlo, un compañero me quitó el teclado y escribió un raro código vudú que nunca había visto: diff <(curl URL1) <(curl URL2). ¿Qué rara sintaxis era esa? Más aún, ¿por qué iba el doble de rápido que mi solución?

Comentarios

D

#3 Como todo el mundo que trabaje con sistemas Unix o "Unix", realmente lol

D

¿por qué iba el doble de rápido que mi solución?
Pues porque no estás accediendo al sistema de archivos. Todo se hace en memoria y quién sabe si bash optimiza y mantiene una sección de memoria compartida.

D

#2
Es bastante obvio lo que he dicho en mi mensaje, que es lo mismo que tu has dicho.

D

#4 Ni de lejos (con cariño)

D

#5
Si entendemos sistema de archivos como escritura a disco, sí.
Si entendemos optimizaciones como la no realización de operaciones innecesarias, también.
(Sin sarcasmo).

D

#4 No creo entonces que hayas entendido mi explicación. Sin acritú lo digo, eh

D

#7
Si vas a base de creencias es normal que no entiendas ni «j».

D

#9 Pues venga makina, que tengas buen finde.

D

#10
Ok.

Black_Diamond

#2 También va más rápido porque en cuanto diff encuentre una diferencia (y eso puede ser el primer byte de un fichero muy largo) va a cerrar los "ficheros de entrada", y seguramente bash va a cancelar ambas descargas.

Aitor

#1 Sí que estás accediendo al sistema de ficheros, estás almacenando cada descarga en un temporal. La clave de la rapidez en este caso es que realiza las dos descargas de forma paralela, cosa que sabrías si lo hubieras leído.

D

#12
Eso es lo que he dicho.
No accede a disco para escritura, realiza todas las operaciones en memoria. Tampoco hace forks de procesos innecesarios.
Y por último, se crean los dos procesos de descarga curl al mismo tiempo.

D

#13
Y nótese que digo creación de procesos curl al mismo tiempo, no lectura, puesto que la lectura de su salida es secuencial (diff no es multihilo), aunque comienza de manera inmediata sin esperar a que terminen los procesos curl., a diferencia de su ejecución secuencial.

Bourée

Muy instructivos los comentarios ya que no sé inglés y soy usuario y defensor del software libre ( sin inglés es jodido pero voy tirando ) lo que no comparto son los votos negativos a@federico_gimeno. Un cordial saludo.