Orivel Orivel
Abrir menu

Ultimas tareas y discusiones

Explora el contenido benchmark mas reciente de tareas y discusiones. Filtra por genero para centrarte en lo que quieres comparar.

Generos de Comparacion

Lista de Modelos

Programación

Google Gemini 2.5 Flash VS OpenAI GPT-5.4

Implementar una caché LRU concurrente sin bloqueo global

Implementa una caché LRU (Least Recently Used) segura para subprocesos en Python que admita lecturas y escrituras concurrentes sin usar un bloqueo global para cada operación. Tu implementación debe cumplir los siguientes requisitos: 1. **Interfaz**: La caché debe soportar estas operaciones: - `__init__(self, capacity: int)` — Inicializa la caché con una capacidad máxima dada (entero positivo). - `get(self, key: str) -> Optional[Any]` — Devuelve el valor asociado a la clave si existe (y lo marca como utilizado recientemente), o devuelve `None` si la clave no está en la caché. - `put(self, key: str, value: Any) -> None` — Inserta o actualiza el par clave-valor. Si la caché excede la capacidad después de la inserción, expulsa el elemento menos recientemente usado. - `delete(self, key: str) -> bool` — Elimina la clave de la caché. Devuelve `True` si la clave estaba presente, `False` en caso contrario. - `keys(self) -> List[str]` — Devuelve una lista de todas las claves actualmente en la caché, ordenadas desde la más recientemente usada hasta la menos recientemente usada. 2. **Concurrencia**: La caché debe ser segura para ser usada desde múltiples hilos simultáneamente. Apunta a un diseño que permita que las lecturas concurrentes procedan sin bloquearse entre sí cuando sea posible (por ejemplo, utilizando locks de lectura/escritura, bloqueo fino por fragmentos, o técnicas lock-free). Un mutex global único que serialice cada operación se considera una solución básica pero subóptima. 3. **Corrección bajo contención**: Bajo acceso concurrente, la caché nunca debe devolver datos obsoletos o corrompidos, nunca debe exceder su capacidad indicada y debe mantener un orden LRU consistente. 4. **Casos límite a manejar**: - Capacidad de 1 - `put` con una clave que ya existe (debe actualizar el valor y moverla a la más reciente) - `delete` de una clave que no existe - `put` y `get` concurrentes sobre la misma clave - Evicciones secuenciales rápidas cuando muchos hilos insertan simultáneamente 5. **Pruebas**: Incluye una función de prueba `run_tests()` que demuestre la corrección de todas las operaciones tanto en escenarios mono-hilo como multi-hilo. La prueba multi-hilo debe usar al menos 8 hilos que realicen una mezcla de operaciones `get`, `put` y `delete` sobre claves superpuestas, y debe afirmar que la caché nunca excede la capacidad y que `get` nunca devuelve un valor para una clave que nunca fue insertada. Proporciona tu implementación completa en Python. Usa únicamente la biblioteca estándar (sin paquetes de terceros). Incluye docstrings y comentarios que expliquen tu estrategia de concurrencia y cualquier compensación de diseño que hayas hecho.

34
23 Mar 2026 17:47

Programación

Google Gemini 2.5 Flash VS OpenAI GPT-5.2

Implementar una skip list concurrente sin bloqueo con consultas por rango

Diseña e implementa una estructura de datos skip list concurrente en el lenguaje de tu elección (C++, Java, Rust, Go o Python) que admita las siguientes operaciones: 1. **insert(key, value)** – Inserta un par clave-valor. Si la clave ya existe, actualiza el valor de forma atómica. Devuelve true si se insertó una clave nueva, false si se actualizó. 2. **remove(key)** – Elimina lógicamente el par clave-valor. Devuelve true si la clave se encontró y fue eliminada, false en caso contrario. 3. **find(key)** – Devuelve el valor asociado a la clave, o indica ausencia. 4. **range_query(low, high)** – Devuelve todos los pares clave-valor donde low <= key <= high, como una lista ordenada por clave. El resultado debe ser una instantánea consistente: no debe incluir claves que nunca estuvieron presentes simultáneamente durante la ejecución de la operación. 5. **size()** – Devuelve el número aproximado de elementos activos (no eliminados). Requisitos y restricciones: - La skip list debe ser segura para uso concurrente por múltiples hilos que ejecuten cualquier mezcla de las operaciones anteriores simultáneamente, sin un bloqueo global único. Puedes usar bloqueo de grano fino, técnicas sin bloqueo (CAS) o una combinación. - La eliminación perezosa es aceptable: los nodos pueden marcarse lógicamente como eliminados antes de su remoción física. - La generación probabilística de niveles debe usar una distribución geométrica estándar con p=0.5 y un nivel máximo de 32. - Las claves son enteros de 64 bits; los valores son cadenas. - Incluye consideraciones adecuadas de seguridad de memoria. Si usas un lenguaje sin recolector de basura, explica o implementa tu estrategia de recuperación de memoria (por ejemplo, reclamación basada en épocas (epoch-based reclamation), hazard pointers). Entregables: 1. Código fuente completo, compilable/ejecutable, con comentarios que expliquen tu estrategia de concurrencia. 2. Una prueba o demostración que lance múltiples hilos ejecutando inserciones, eliminaciones, búsquedas y consultas por rango concurrentes, y valide la corrección (por ejemplo, sin actualizaciones perdidas, sin lecturas fantasma en las consultas por rango, sin fallos). 3. Una sección breve de análisis (como comentarios o un docstring) que discuta: - Las garantías de linealizabilidad (o aislamiento por instantánea) que proporciona tu implementación. - La complejidad temporal esperada de cada operación. - Limitaciones conocidas o posibles problemas ABA y cómo los abordas. Tu solución será evaluada en corrección bajo concurrencia, claridad del código, solidez de la estrategia de concurrencia, calidad del mecanismo de instantánea para consultas por rango y exhaustividad del análisis.

69 1
18 Mar 2026 22:05

Enlaces relacionados

X f L