Logo Revista Java

startjavaabout

articles

00. Prólogo (java)
01.a TEMAS INTRODUCTORIOS. (java)
01.b Comandos que Inician la Máquina de Java y la salida de texto (java)
01.c Descripción empírica de la Programación Orientada a Objetos con Java. (java)
01.d Herencia Soportada por Java y Tipos de Datos Básicos. (java)
01.e Operadores, Delimitadores Básicos Y los nombres de función Válidos. (java)
02.a Codificación Inicial y Estructuras de Datos. (java)
02.b Paquetes, y Palabras clave, (Reservadas) (java)
02.c Tipos de Datos, y declaraciones de funciones, Tablas. (java)
02.d Bucles y Tomas de decisión, Excepciones y Control de Errores. (java)
02.e Secuencias de Escape (java)
02.f Concatenación y Conversiones a Texto. (java)
02.g Métodos de Entrada y Salida de datos (java)
02.h Crear Objetos de la biblioteca de Java (java)
02.i Ejercicio: Entrada de Datos y Conversiones (if, try, catch) (java)
02.j Ejercicios, usando excepciones y while, y switch (java)
02.k Práctica complementaria Resuelta sin Arreglos. (java)
02.l Ejercicios de la práctica complementaria (java)
02.m Práctica complementaria resuelta Ej 6 y 7 (java)
02.m Práctica complementaria resuelta Ej 8 y 9 (java)
03.a Métodos estáticos y mecanismos de programación (java)
03.b Arreglos (Arrays o Vectores) (java)
03.c La clase Math como ayudante para resolver problemas (java)
03.d Usando arreglos para un buffer, colas de espera, pilas y listas. (java)
03.e Implementación del buffer tipo FIFO (Cola de espera, el primero es primero en salir) (java)
03.f Implementación del buffer tipo FIFO (Cola de espera, el primero es primero en salir) 2da parte (java)
03.g Implementación del buffer tipo LIFO (La pila, último en llegar es primero en salir) (java)
03.h Implementación del buffer tipo LIFO (La pila, último en llegar es primero en salir) 2da parte (java)
03.i Implementación de una Lista de datos. (java)
03.j Búsqueda Secuencial dentro de la lista de datos. (java)
03.k Búsqueda Aleatoria dentro de la lista de datos. (java)
03.l Búsqueda binaria dentro de una lista ordenada de datos. (java)
03.m Método para Ordenar - La Burbuja (java)
03.n Método para Ordenar - QuickSort Recursivo (java)
03.o Ejercicios Resueltos, ordenar con Java (java)
04.a Nuestro primer Objeto en Java (java)
04.b Codificación del primer Objeto en Java (java)
Buffering  Memoria temporal, mtodos de lectura temporal para agilizar la lectura, o evitar perder informacin que no es posible leer y procesar en el momento.

03.d Usando arreglos para un buffer, colas de espera, pilas y listas.

(390)
Buffering Memoria temporal, mtodos de lectura temporal para agilizar la lectura, o evitar perder informacin que no es posible leer y procesar en el momento.
contact
Created,Modified
2009-04-02 11:49:25, 2009-04-02 11:49:43
Author,Nick
Gustavo Guillermo Perez, (madgus) [myblog]

Buffering – Memoria temporal

Algunas veces es necesario procesar datos con cierta velocidad o cantidad conocida, la lectura de datos de 1 en 1 puede producir que en un cierto momento nuestro programa se quede sin hacer nada, o simplemente es más efectivo leer un archivo por bloques de datos grandes que de byte en byte (sobrecarga de llamadas a la misma función).

En otras ocasiones podemos estar recibiendo datos por la red y si nuestro programa es lento para procesarlos o necesita atención por parte de un usuario para decidir que hacer, puede suceder que lleguen más datos de los que se pueden procesar, en este caso podemos utilizar un segmento de memoria temporal para almacenar estos datos y que no se pierdan y así aprovechar el tiempo en el que no llegan datos.

El criterio para implementar estos tipos de memorias temporales (buffers de aquí en adelante) es variable, siempre se tomará en cuenta el promedio de datos que lleguen a nuestro programa o la cantidad de veces que es necesario llamar a una función que lee datos si lo hacemos con bloques más pequeños o más grandes, el valor óptimo siempre es empírico.

Para determinar este valor siempre tendremos en cuenta que bloques más grandes de datos consumen más memoria del sistema operativo, y que muchas veces para mover bloques grandes de datos se puede perder mucho tiempo, por otra parte si nuestro archivo del disco no dispone de datos para llenar esos bloques, estaríamos desperdiciando memoria si abriéramos muchos archivos más pequeños que el buffer, por otro lado si el buffer es muy pequeño, entonces el efecto es contrario, estaríamos llamando innumerables cantidades de veces a la función leer, por lo que produciríamos un desperdicio de recursos del procesador, enlenteceríamos el sistema operativo, entonces queda claro que no leeremos archivos en bloques de 1MB ni lo haremos byte por byte.

Usando arreglos para un buffer, colas de espera, pilas y listas.

Bien, pongamos el siguiente ejemplo, se quieren enviar datos de una máquina a otra en un sólo sentido, una telefonista debe llamar a ciertos teléfonos que llegan desde otro punto de una red y no puede ver el siguiente teléfono hasta que haya terminado su llamada, del otro lado una secretaria que revisa el correo con una frecuencia de 5 minutos envía los teléfonos del soporte técnico que deben ser atendidos por la telefonista, teniendo en cuenta que las llamadas suelen durar entre 10 a 30 minutos y que los correos que pueden llegar al mismo tiempo no son más de 6 y que existen lapsos de hasta 60 minutos sin recibir ni un sólo correo, y que no quedan llamadas pendientes en el transcurso del día.

Criterios:

  1. Sobredimensionar es sobrecargar

  2. Minimizar es sobrecargar

  3. Si llenamos el buffer, no se podrán ingresar más dátos.

  4. Supondremos que en el peor de los casos llegan 10 correos

  5. Supondremos que en el peor de los casos duran 30 minutos

  6. Supondremos que en el peor de los casos el lapso es de 20 minutos durante 4 períodos.

Los últimos tres criterios son suposiciones, que en la vida real son la telefonista y secretaria quienes pueden proveer este tipo de estadística sobre los horarios más saturados, tenemos que tener en cuenta que el problema es humanamente soluble ya que no quedan pendientes sin tratar así que durante el día se resuelven todos los llamados: 20min x 4p = 80min => 1) se resuelven en 80 minutos 2 llamados y ¾ 2) se acumularon casi 40 tel – 3 tel = 37 tel

Entonces en el peor de los casos la acumulación máxima probable y el despacho de teléfonos más tardado producen un máximo de 37 teléfonos. Entonces nuestro buffer óptimo es de 37 elementos. Como almacenar un teléfono no consume tanta cantidad de recursos de un sistema utilizaremos un buffer de 40 elementos.

Nota: el manejo de memoria RAM en el sistema para valores o tipos de datos de almacenamiento fijo, como son todos los tipos de datos básicos excluyendo “String”, es de potencias de 2n y a veces de múltiplos de estas potencias, siendo recomendable elegir siempre un valor cercano pero no igual porque si la JVM utiliza bloques de 64enteros como buffer interno si usáramos 65enteros estaríamos obligando a usar el espacio de 128enteros.


leavecomment

*Hasta que esta leyenda no desaparezca el libro no ha sido terminado, descarge en pdf:

http://compunauta.com/forums/linux/programacion/java/ebook.html




Aprendiendo Java - Ejemplos resueltos, Ejercicios, prácicas y técnicas de programación con Java #1 - ezine - ©Compunauta - myblog - Anuncios - 1059