texto:   A-   A+
eliax

Pregunta a eliax: ¿Qué es un Buffer y cómo funciona?
eliax id: 6924 josé elías en ago 7, 2009 a las 09:24 PM (21:24 horas)
eliax - para mentes curiosasAyer les expliqué el concepto de un Cache, hoy les explicaré un concepto relacionado llamado un Buffer, y trataré una vez más de utilizar ejemplos de la vida cotidiana para que entiendan el concepto.

Así que empecemos hoy imaginándonos que trabajas en un restaurante en donde solo venden hamburguesas, y tu trabajo es ser el que las prepara según las vayan ordenando.

Una cosa que notarás en tus primeros días en ese empleo es que en determinados momentos del día, en particular a la hora del almuerzo y la cena, los clientes piden grandes cantidades de hamburguesas.

Inicialmente si te pedían dos hamburguesas, decías "¡en un momento están listas!", y empezabas a prepararlas, y cuando terminabas las entregabas a la persona encargada de tomar la orden del cliente.

Sin embargo, mientras tu preparabas esas dos hamburguesas el cliente simplemente esperaba con los brazos cruzados, haciendo el trabajo bastante ineficiente.

Pero poco después se te ocurrió una idea: En vez de esperar a que te pidan las hamburguesas, lo que hay que hacer es preparar de antemano varias hamburguesas para cuando la hora pico llegue ya se puedan vender varias de ellas en lo que tu sigues preparando unas cuantas hamburguesas mas.

Lo que acabas de crear es un Buffer.

Un Buffer no es nada más que preventivamente tener algo listo, para cuando lo necesites ya tenerlo hecho y no tener que buscarlo o hacerlo en el momento que te lo pidan (esto es diferente a un Cache como veremos más adelante). Y este concepto, como veremos a continuación, es (junto con el Cache) uno de los conceptos más básicos y universales en el mundo de la computación...

Por ejemplo, cuando ves un video de YouTube por Internet, notarás que YouTube primero empieza a pre-descargar el video, pero sin reproducirlo, para así tener suficiente video ya descargado para cuando empiece a reproducirlo ya tenga "por adelantado" buena parte del video en tu PC. Usualmente muchos dicen que el video ha sido puesto en Cache, pero en realidad lo correcto es decir que ha sido puesto en un Buffer.

De esa manera, si el video está reproduciendo, y la conexión de Internet falla por un par de segundos, el video sigue viéndose normalmente porque lo que tu navegador web hace es que reproduce el video del Buffer, y no del Internet.

En realidad, y esto es algo curioso, YouTube nunca reproduce videos directamente desde Internet, sino que los reproduce siempre desde el Buffer. Lo que ocurre tras bastidores es que el Buffer se vive llenando de datos desde el Internet por un extremo, y por el otro lado lo envía a la pantalla de tu PC. Y lo mismo con casi todo sistema que utilice Buffers.

Este concepto en nivel técnico es bastante potente, pues no solo hace que el flujo de dato sea constante aun si el verdadero flujo de datos no lo sea, sino que además es una técnica para aumentar el rendimiento de flujos de datos. Veamos como.

Digamos que el restaurante de hamburguesas se hace bastante popular, y que tu solo ya no eres suficiente para preparar las hamburguesas, aun con un Buffer de decenas de hamburguesas pre-hechas. En este caso se puede contratar a otra persona para que te ayude, pero ahora ambos pueden contribuir al Buffer, llenándolo entre los dos de hamburguesas por un extremo, y por el otro extremo seguimos con una sola persona atendiendo a los clientes, independientemente del trabajo que ustedes hagan detrás.

Similarmente, imagínate un canal de TV que quiera transmitir su programación entre una ciudad y otra por medio de Internet. Al poco tiempo se da cuenta que el ancho de banda de su conexión T1 (1.544 Mbps) no es suficiente para enviar el video a la calidad que desea, pero calcula que con el doble de ancho de banda sería suficiente hacerlo. Sin embargo, por motivos técnicos la empresa que le provee de Internet le informa que una T1 es la velocidad mayor que ofrecen.

La solución es contratar dos lineas separadas, dividir el flujo de datos de video entre las dos lineas, y en el otro extremo ensamblar el video de nuevo en un Buffer, y después tomar en la red local remota el video combinado desde el Buffer y reproducirlo. Es decir, en la ciudad de destino el Buffer actúa no solo como una manera de poder leer el video de forma continua, sino que también de aislar la aplicación final del detalle técnico de que el video proviene de dos conexiones diferentes.

Este mismo concepto de Buffer es muy común también en supermercados: Mantienen un Buffer de comida en un almacén dentro del supermercado, para que mientras se va vendiendo la comida ellos vayan llenando los estantes de comida con la almacenada en el almacén (el Buffer), para de esa manera cada vez que necesiten comida no tener que llamar a sus proveedores y esperar varios días a que llegue esta.

Entonces, el objetivo de un Buffer es tratar de garantizar que siempre habrá un flujo constante de datos. Es decir, en vez de obtener los datos solo en el momento que uno los pida, que estos ya estén disponibles antes de uno pedirlos.

Entonces, una diferencia fundamental entre un Cache y un Buffer, es que en el caso de un Cache que está diseñado para tratar de adivinar cuáles serán los datos que serán pedidos próximamente de manera aleatoria, un Buffer por otro lado está diseñado de manera más sencilla ya que los datos que se piden no son aleatorios (como distintos números telefónicos) sino que continuos (como los fotogramas de un video, o una linea de hamburguesas), por lo que el Buffer siempre sabe que es lo que le van a pedir próximo.

Y como siempre, pueden acceder a más artículos similares en la sección de "Pregunta a eliax", y enviar sus preguntas por este medio.

autor: josé elías

Comentarios

  • Mas claro de ahi se dana!!

    Gracias Eliax

  • exelente explicacion

  • entendido profesor :-)

  • Muchas gracias Eliax!
    Estas dos publicaciones de veras me han servido de mucho.

  • El siguiente es un ejemplo adicional que no quise poner en el artículo para no alargarlo demasiado, y que espero sirva de curiosidad para algunos:

    ¿Alguna vez en uno de esos programas que graban CD han notado una barra visual que dice "Buffer" que se llena y vacía constantemente y tu ni ideas tiene de lo que eso representa? Pues lo que sucede aquí (y parte de esto no aplica a equipos modernos, pero lo explico para que entiendan la razón) es que cuando se graba un CD el quemador de CDs espera tener siempre un flujo constante de datos disponible, ya que el CD gira a una velocidad continua, y si el láser que quema el CD no tiene datos para quemar para cuando el disco esté girando bajo él, entonces ocurren errores de grabación.

    El problema en realidad sin embargo no es con el quemador de CD, sino con el disco duro (o lugar en la red) en donde se encuentren los datos para quemar en el CD. Si esos datos no se pueden leer a tiempo antes de escribirlos al CD, un error ocurre.

    La solución, como ya pueden adivinar, es un Buffer. Lo que sucede es que el programa de quemar CDs lo que hace es que lee de antemano un porcentaje de los datos a quemar desde el disco duro a la memoria RAM de tu PC (el RAM actuaría como el Buffer), ya que el RAM de tu PC es miles de veces mas rápido que tu disco duro, por lo que es difícil que los datos no se puedan pasar a tiempo del RAM al CD.

    Entonces lo que ocurre tras bastidores es que mientras por un lado el quemador de CD lee del RAM para escribir al CD, que por el otro lado se está leyendo el disco duro a la memoria RAM. De esta manera si por alguna razón el disco duro falla por un segundos, que eso no afecte al quemador ya que los datos están siendo leídos de RAM. Es por eso que visualmente vez como esa barra de Buffer se expande y contrae. Cuando el disco duro falla el quemador sigue consumiendo datos del Buffer, pero ya que el Buffer no está en esos momentos leyendo del disco duro el tamaño de este disminuye. Si disminuye a cero (es decir, el quemador leyó todos los datos del Buffer antes de que el Buffer pueda volver a ser llenado por el disco duro) ocurre un error también.

    Esa es la razón por la cual mientras mas grande es el Buffer, mejor, ya que guarda mas datos de antemano. Pero obviamente, mientras mas grande es el Buffer, mas tiempo se necesita para llenarlo de datos, por lo que no siempre es bueno tener un Buffer muy grande. Un buen ejemplo es video-conferencia por Internet: No quieres tener un Buffer de varios segundos porque de ser así verás varios segundos atrasados el video de la otra persona con quien hablas, lo que sería bastante incómodo.

    • Ah!
      Por fin entendí lo que significaba el condenado Buffer en el Nero :)
      Gracías Elías!!

      Aunque una pregunta, dices que entre más grande el buffer, mas tiempo se necesita... entonces todos los buffers vienen en un tamaño prediseñado o se pueden modificar?
      Porque nunca he visto en las especificaciones de los discos duros u otros dispositivos su tamaño de buffer...

      • Los Buffers en hardware no se pueden modificar, pero los implementados en software por lo general sí. Obviamente, está a que el diseñador del buffer en software programe la capacidad de cambiar el tamaño del buffer dinámicamente.

  • Excelentes explicaciones eliax muchas gracias
    pienso que para complementar estos temas seria de mucha utilidad bajo tecnica didactica que has venido utilizando que nos hablaras de la tecnologia streaming.


    gracias...

    • Te refieres a Streaming en como se usa en video o a Streaming en como se usa en computación? (son dos cosas similares, pero de diferentes aplicaciones).

  • Seria bueno algo de tecnologia streaming estoy deacuerdo

  • Hola Eliax...

    me refiero especificamenta a la tecnologia de Streaming que nos permite escuchar emisoaras y ver canales de TV en tiempo real en la Internet .

    Gracias

  • Gran articulo!!

    Muchas Gracias

  • gracias por las explicaciones sobre el buffer y el caché, están escritas en un lenguaje que podemos entender los novatos en esto de la informática. Concretamente a mi me está pasando con el nero algo referido al caché. Cuando intento grabar en un dvd un ppt se me bloquea y me pone caché de archivos terminado. Me podrías explicar el porqué y como puedo solucionarlo. Muchas gracias y un saludo.

  • @Jose Elías, una manera de explicar como funciona un buffer es con un cubo de agua que tiene un agujero en la parte inferior, con la salvedad de que cada gota de agua saldrá en el mismo orden que entró.
    A medida que se le suministre agua por la parte superior, por el agujero saldrá un flujo constante de agua.
    Si el flujo de agua que sale por el agujero es menor al flujo del suministro de agua del cubo, en algún momento ocurrirá un subdesbordamiento (buffer underflow).
    De manera contraria, si el flujo de agua que escapa por el agujero es menor que el suministro de agua del cubo, ocurrirá un desbordamiento (buffer overflow).
    Estos casos pueden ser errores fatales en algunas circunstancias.
    En telecomunicaciones, si ocurre un desbordamiento en el buffer de recepción de datos de un equipo receptor, se perderán los datos subsiguientes ya que no habrá espacio disponible para almacenarlos.

    • Me ha encantado tu ejemplo con el cubo de agua :) Lo tomaré prestado en futuras explicaciones, ¡gracias! :)

  • muy bueno y claro tú ejemplo de las hamburguesas para entender BUFFER.

    AHORA lo que me falla es almacenamiento en buffer y no puedo ver videos,por qué?
    Saludos

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
9 + 7 = requerido (control anti-SPAM)
 

"Excelente artículo!!!, esto se debería enseñar en todas las escuelas"

por "Juan Pablo" en may 27, 2014


en camino a la singularidad...

©2005-2014 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax