-
Title:
03-04 Batching_and_Caching
-
Description:
03-04 Batching_and_Caching
-
Quiero presentarles
mis dos técnicas favoritas de desempeño,
-
agrupamiento y almacenamiento.
-
Como ya lo mencionamos,
algunas funciones u operaciones
-
tienen una cantidad específica
de gastos generales relacionados con ellas
-
diferentes a los costos de desempeño
de la operación en sí misma.
-
Como cargar datos en la memoria
antes de ejecutarla
-
o clasificar un grupo de valores
antes de hacer una búsqueda.
-
Si se ejecuta varias veces y los múltiplos
representan un gran número,
-
estos gastos generales se convertirán
en una carga para tu app.
-
El proceso de agrupamiento por lotes
soluciona este problema de desempeño
-
eliminando los gastos generales
por ejecución de estas operaciones.
-
Es como compartir un auto
en vez de conducir el tuyo.
-
Esto se ve con frecuencia en tu código
cuando tienes que preparar tus datos
-
antes de operar con él.
-
Ahora, digamos que la forma más eficaz
de encontrar un valor
-
en un conjunto es clasificarlo
y ejecutar la búsqueda binaria.
-
Para ser claros, esta en realidad
no es la forma más eficaz.
-
Solo síganme porque estoy tratando
de explicarles algo.
-
La manera más simple
de hacer esto es escribir una función
-
que en conjunto de valores
-
clasifique el conjunto y luego busque
para ver si el valor existe en él.
-
Ahora, esto puede estar bien
para cierto nivel de desempeño
-
pero digamos que tienes 10.000 valores
que quieres probar
-
y el tamaño del conjunto es de millones.
-
De repente, estás incurriendo en toneladas
de gastos generales por prueba
-
en forma de clasificación.
-
La respuesta es bastante clara.
-
Crear la versión clasificada del conjunto
y luego permitir
-
que los 10.000 valores sean probados
para la inclusión después de eso.
-
Esto es agrupamiento por lotes.
-
Factorizamos la operación que se repite
y la hicimos una vez.
-
Ahora, hay un concepto similar a este
conocido como almacenamiento en cache
-
que es la técnica de desempeño
más importante para comprender
-
principalmente porque maneja todo
en la tecnología moderna de computación.
-
Tu computadora, por ejemplo.
-
El RAM ofrece un lugar
para el almacenamiento de la información
-
que es más rápido de acceder
para la CPU que el disco duro.
-
Tomemos, por ejemplo, las redes
y la internet actual.
-
En el mundo hay enormes servidores
llamados centros de datos.
-
Su único fin es almacenar o guardar
el contenido que se usa con frecuencia
-
para que tu PC no tenga que alcanzar
un servidor ubicado a 12.000 millas
-
cuando tu amigo
en Egipto publique una foto.
-
Bueno, a menos que estés en Egipto.
-
Pero ya entiendes la idea.
-
En tu código, el lugar más común
para encontrar optimizaciones
-
de almacenamiento es donde los datos
se calculan varias veces
-
pero cuyos resultados siempre son iguales.
-
Por ejemplo, si estás en medio de un bucle
que estás calculando
-
los derivados de una matriz
de cuatro por cuatro
-
y ese resultado siempre da igual,
allí desperdicias desempeño
-
recalculando cada iteración del bucle.
-
En cambio, calcula y guarda los resultados
fuera del bucle
-
y deja que las partes internas del bucle
referencien el resultado guardado.
-
El motivo por el que me gustan
el agrupamiento y almacenamiento
-
es que cada mejora de desempeño
que puedas pensar
-
incluyendo las mencionadas en este curso,
-
es una variante efectiva
de estas dos técnicas básicas.
-
Si de verdad quieres convertirte
en un ninja del desempeño,
-
entonces será mejor que seas
un profesional en el aprovechamiento
-
del fantástico poder de estas técnicas.
-
Así que, comencemos.