Resumen de Algoritmos y Paradigmas de Programación
Algoritmos y Paradigmas de Programación: Guía Completa
Introducción
La programación reactiva y concurrente es un enfoque para diseñar sistemas que procesan eventos y datos a lo largo del tiempo de forma no bloqueante, escalable y tolerante a fallos. Este material explica los conceptos clave de streams, operadores, contrapresión y características de sistemas reactivos, con ejemplos prácticos y aplicaciones reales.
Definición: Un stream es una secuencia de eventos o valores que se producen a lo largo del tiempo y puede incluir valores, errores y señales de completitud.
Conceptos fundamentales
Streams y el patrón observable
- Un stream representa datos que aparecen en distintos momentos (entradas de usuario, sensores, respuestas de red).
- El patrón observable: una fuente emite eventos y varios observadores pueden suscribirse para recibirlos (relación uno-a-muchos).
Definición: Observable es una abstracción que permite suscribirse a un stream para recibir notificaciones sobre nuevos valores, errores o completitud.
Operadores básicos sobre streams
- Map: transforma cada elemento aplicando una función.
- Filter: deja pasar solo elementos que cumplen un predicado.
- Merge: combina múltiples streams en uno solo, preservando emisiones conforme ocurren.
- Combine: crea un stream nuevo basado en los valores más recientes de varios streams.
- Debounce: emite un elemento solo si ha pasado un periodo sin nuevas emisiones.
- Throttle: limita la frecuencia de emisiones.
Definición: Operador es una función que toma uno o más streams y devuelve un nuevo stream transformado.
Contrapresión (backpressure)
- Problema: el productor puede emitir datos más rápido de lo que el consumidor procesa.
- Soluciones/estrategias: buffer, sample, throttle, drop, solicitar menos (pull) o ajustar la velocidad del productor.
Definición: Contrapresión es el mecanismo por el cual el consumidor comunica su capacidad al productor para evitar sobrecarga.
Características de sistemas reactivos (principios)
- Responsivos: permanecen responsivos bajo cargas y fallos.
- Resilientes: aíslan y contienen fallos para recuperarse sin degradación general.
- Elásticos: escalan horizontalmente según la demanda.
- Orientados a mensajes: usan comunicación asincrónica y no bloqueante entre componentes.
Tabla comparativa: características vs beneficio
| Característica | Beneficio principal |
|---|---|
| Responsivo | Mejora la experiencia de usuario y SLOs |
| Resiliente | Contención de fallos y recuperación local |
| Elástico | Escalado eficiente frente a picos |
| Orientado a mensajes | Aislamiento y mejor tolerancia a fallos |
Ejemplos prácticos
Ejemplo: Stream de lecturas de temperatura
// Creación de un stream de lecturas de temperatura
streamDeTemperatura = crearObservable(función(emisor) {
// Emite temperatura periódicamente
cada(1000, función() {
temperatura = obtenerTemperaturaDelSensor()
emisor.emitir(temperatura)
})
})
// Suscripción al stream
streamDeTemperatura.suscribir(
función(temperatura) {
if (temperatura > 30) { activarAlarma() }
actualizarInterfazUsuario(temperatura)
},
función(error) { registrarError("Error en sensor de temperatura", error) }
)
- Observaciones: el código suscriptor reacciona de forma asincrónica sin solicitar activamente las lecturas.
Ejemplo: Monitoreo de tráfico urbano (flujo complejo)
// Definición de streams de datos de sensores
sensorStream = combinarStreams([
obtenerStreamDeSensor("sector-norte"),
obtenerStreamDeSensor("sector-sur"),
obtenerStreamDeSensor("sector-este"),
obtenerStreamDeSensor("sector-oeste")
])
informeTrafico = sensorStream
.agruparPor(sensor => sensor.ubicación)
.transformar(grupo => {
return {
ubicación: grupo.clave,
densidadTráfico: calcularDensidad(grupo.valores),
velocidadPromedio: calcularPromedio(grupo.valores.map(v => v.velocidad)),
timestamp: ahora()
}
})
.
¿Ya tienes cuenta? Iniciar sesión
Reactiva y Concurrente
Klíčová slova: Paradigmas de programación y algoritmos, Algoritmos de ordenamiento y búsqueda, Recursividad, Programación funcional, Programación reactiva y concurrente, Eficiencia algorítmica, Programación, Programación orientada a objetos, Algoritmos y estructuras de datos
Klíčové pojmy: Un stream es una secuencia temporal de valores, errores y completitud., Observable: suscripción uno-a-muchos para recibir eventos de un stream., Map y Filter transforman y filtran elementos de un stream respectivamente., Merge combina emisiones de varios streams en uno solo., Combine crea emisiones a partir de los valores más recientes de varios streams., Contrapresión permite al consumidor comunicar su capacidad al productor., Sistemas reactivos son responsivos, resilientes, elásticos y orientados a mensajes., Usa debounce y throttle para controlar la frecuencia de emisiones., Bibliotecas comunes: Rx, Akka, Project Reactor, Spring WebFlux., En entornos pequeños, la sobrecarga reactiva puede no justificarse.