Los rincones del API Win32: El caché de WinInet - Pero... ¿qué es el caché?
2 - Pero... ¿qué es el caché?
Todos sabemos que en informática algunas operaciones son más lentas que otras. Siempre se nos ha dicho que leer de un disco es más lento que leer de memoria, así como acceder a través de una red es más lento que acceder a nuestra propia máquina. Incluso, utilizar una red como Internet (WAN) es más lenta que una red local (LAN). Esto es inevitable, ciertas operaciones son costosas en tiempo y como mucho podemos arañar algunos milisegundos, pero nunca conseguiremos algo rápido.
En los inicios de la informática, los discos eran de lo más lento que se podía manejar. Pensad en las películas de los años 70-80, en las que aparecían los grandes centros de procesamiento de datos, con esas grandes cintas que se colgaban en vertical de unos armarios refrigerados. Las cintas giraban en uno y otro sentido, buscando los datos desesperadamente. En ocasiones había hasta robots que se encargaban de cambiar la cinta cuando era necesario. En definitiva: el acceso a datos en disco era demasiado lento.
Vamos a imaginarnos una pequeña historia: "estamos en el centro de procesamiento de datos de algún afamado laboratorio, a principios de los años 70. Nos han encargado implementar un algoritmo (posiblemente en ensamblador) en el que es necesario acceder a un dato concreto que está almacenado en alguna de nuestras cintas. Después de ciertas búsquedas, sabemos que nuestro dato está catalogado en la cinta 327, armario 12, estantería 8. Tenemos que dar la orden al robot, el cual se desplaza hasta la posición indicada, coge la cinta, la sitúa en el lector (que posiblemente está a unos metros de distancia del armario) y da la señal para indicar que ya está lista. Han pasado varias decenas de segundos. Una vez que todo está listo para empezar, nuestro programa abre el fichero, busca la posición adecuada y lee el dato. Como las cintas son un dispositivo de búsqueda secuencial, la búsqueda del dato es muy lenta, y es preciso rebobinar toda la cinta hasta el lugar adecuado. Han pasado otras decenas de segundos. En definitiva, hemos tardado varios minutos para acceder a un único dato". Esto es lo que le podía pasar a un programador de la década de los 70, mientras que hoy en día medimos los tiempos de acceso a disco en milisegundos (5-10 milisegundos es el tiempo más normal en leer un dato de un disco duro).
![]() |
Continuemos con nuestra historia: "Lo peor viene después de algunas instrucciones, cuando nos damos cuenta de que volvemos a necesitar el mismo dato. ¡¡Horror!! Tenemos que volver a pasar por el mismo proceso, perdiendo de nuevo algunos minutos. Después de pensarlo se nos ocurre una solución sencilla y efectiva: almacenar en memoria el dato que habíamos obtenido en nuestra primera operación de lectura, y utilizar ese mismo dato para evitar la segunda lectura. Con esto conseguimos dividir a la mitad los tiempos de acceso a ciertos dispositivos lentos."
A grandes problemas, grandes soluciones, así que esta técnica se fue haciendo muy popular, y cada vez se utilizaba con más frecuencia. Llegó un punto en que se reservó un espacio de memoria fijo para este fin: para almacenar temporalmente ciertos datos de disco, y así evitar su lectura más de una vez. A esta memoria se le llamó "memoria de caché" y se decía que el dato estaba en el caché cuando estaba almacenado en esta memoria, y no era necesario volver a realizar algún proceso para obtenerlo de nuevo.
Y el caché nos acompaña hasta nuestros días. Hoy en día, los discos duros contienen un caché interno que almacena los últimos datos leídos, las CPU tienen una memoria caché para almacenar las últimas instrucciones ejecutadas, los servidores web tienen un caché donde se almacenan las últimas peticiones servidas, y los navegadores tienen un caché donde se almacenan las últimas páginas visitadas.
Como veis, siempre que entra en juego alguna operación lenta (o crítica), el caché puede ser nuestra solución.
Y por si fuera poco, el caché tiene otra utilidad: proveernos del dato si el dispositivo donde estaba almacenado deja de funcionar.
Pero nuestra pequeña historia continúa: "después de algunas operaciones, y varios minutos de ejecución vemos cómo el robot comienza a comportarse de forma extraña: coge las cintas y las suelta en el aire, o se desplaza de forma aleatoria intentando agarrar algo en el aire. Quizá sean fantasmas. Algo está pasando, y precisamente ahora que necesitamos obtener otro dato de la cinta. Pero algo nos salva: hemos almacenado las últimas 10 lecturas en la memoria caché, así que es posible que el dato que necesitamos ahora ya esté en la caché. Así que lo buscamos, y ¡bingo! Nuestro dato está ahí, así que no es necesario molestar al robot, que parece que se encuentra indispuesto."
De todas formas, no es oro todo lo que reluce, y el uso del caché introduce nuevos problemas que no teníamos hasta ahora. Volviendo a nuestro centro de procesamiento de datos... "hemos realizado nuestra primera lectura, y como hacemos uso del caché (muy acertadamente), hemos guardado este dato en nuestra memoria caché. El resto de investigadores continúan trabajando al igual que nosotros, leyendo, y, porqué no, modificando ciertos datos de las cintas. Después de algunos minutos, necesitamos de nuevo nuestro dato, y acudimos a nuestra querida caché para evitar el largo proceso de lectura. Sin embargo, el dato no parece el correcto. Es aquel que hemos leído, pero algo no cuadra. Nadie se ha dado cuenta de que alguien ha utilizado la cinta para modificar ese mismo dato, ya que ha cambiado su cálculo, y nosotros, como lo tenemos almacenado en el caché y confiamos ciegamente en él, vamos a utilizar un dato antiguo y erróneo, así que nuestros resultados podrán ser catastróficos."
En este caso se dice que el caché "ha perdido la coherencia", y en cierto modo, manda al traste nuestro invento. Este es uno de los principales problemas del caché, ya que, si transcurre mucho tiempo desde que almacenamos el dato en la caché, hasta que hacemos uso de él, puede ser que haya quedado desfasado. De todas formas, poco a poco se han ido creando técnicas para evitar al máximo esta pérdida de coherencia.
Dependiendo del uso que queramos dar al caché, esta situación se puede dar o no. Por ejemplo, las instrucciones de la CPU que se almacenan en el caché, nunca quedan desfasadas, ya que son datos de sólo lectura, y no pueden ser modificados. En el caso que nos ocupa, en el caché de un navegador de internet (como Internet Explorer), sí que se nos produce esta situación, ya que es posible que una página haya sido modificada después de que nosotros la almacenemos en el caché.
Sin embargo, aunque tengamos estos pequeños inconvenientes, el caché de Internet Explorer, como cualquier otro caché, tienen una doble utilidad muy importante: acelerar el acceso a ciertos recursos remotos, y asegurarnos el acceso a algunos recursos aunque no dispongamos de conexión a internet.
|
Opiniona sobre 'Los rincones del API Win32: El caché de WinInet - Pero... ¿qué es el caché?' (0)
Opina sobre este tutorial |



