concurrency
26 noticias
Go: Nuevo sistema de logs con buffer circular
El artículo de Alex Rios, "Construyendo slogbox", explora la implementación de un manejador de logs (`slog.Handler`) en Go que utiliza un buffer circular (ring buffer) para almacenar los últimos registros de logs. La motivación surge de la necesidad de tener acceso a logs recientes para fines de mon
Surelock: Nueva Biblioteca Rust Evita Bloqueos de Código
Desarrolladores de Rust han presentado 'Surelock', una nueva biblioteca diseñada para eliminar los bloqueos (deadlocks) en el código. Los bloqueos, difíciles de detectar y que pueden causar fallos inesperados en sistemas, son un problema común en la programación concurrente. Surelock aborda este pro
Rust: Compartir datos mutables de forma segura
Este artículo de Alice Ryhl explica cómo compartir estados mutables en Rust, un concepto crucial para aplicaciones concurrentes, tanto síncronas como asíncronas. El problema fundamental es permitir que múltiples hilos (threads) modifiquen el mismo dato de forma segura, evitando condiciones de carrer
Lisette: Nuevo lenguaje fusiona Rust y Go
Lisette es un nuevo lenguaje de programación diseñado para ser sintácticamente similar a Rust pero con un runtime de Go. Su objetivo principal es ofrecer una alternativa que combine la seguridad y expresividad de Rust con la interoperabilidad y el ecosistema maduro de Go. Esto se logra a través de u
Python Async: ¿Determinista? El desafío revelado
El artículo de dbos.dev explora un desafío crucial al desarrollar bibliotecas de ejecución duradera en Python: cómo lograr la determinancia en flujos de trabajo asíncronos. La asincronía, aunque mejora el rendimiento al permitir la ejecución concurrente de tareas (por ejemplo, usando `asyncio.gather
Unity: La 'hack' de corrutinas revelada
Un artículo explora el uso de corrutinas en C++ y cómo Unity, en C#, ha implementado una solución ingeniosa debido a limitaciones históricas en el soporte de `await` en C#. Inicialmente, las corrutinas de C++ han sido poco utilizadas debido a su complejidad y la falta de ejemplos concretos. El artíc
SBCL: Hilos Ligeros Mejoran la Concurrencia
Este documento describe una implementación de hilos cooperativos ligeros (fibers) para SBCL, una implementación de Common Lisp. El objetivo principal es proporcionar una alternativa eficiente a los hilos del sistema operativo (OS) para manejar aplicaciones concurrentes, especialmente aquellas con ca
Aislamiento en Erlang: ¿Solución o Limitación?
Este artículo explora las limitaciones del modelo de concurrencia basado en aislamiento, utilizando Erlang como ejemplo paradigmático. Erlang, conocido por su robustez y alta disponibilidad (como se evidencia en sistemas como WhatsApp), implementa un modelo de 'actores' donde cada proceso tiene su p
Kovan: Nueva Biblioteca Rust para Gestión de Memoria
Este artículo del blog de vertexclique.com introduce Kovan, una nueva biblioteca de Rust diseñada para abordar un problema crítico en sistemas concurrentes de alto rendimiento: la recolección de memoria wait-free. El problema surge al usar estructuras de datos lock-free, como las proporcionadas por
Futuros bloqueados: un problema oculto en Rust
El artículo "Never snooze a future" aborda un problema sutil pero crítico en la programación asíncrona en Rust: el "snoozing" de futures. En esencia, el snoozing ocurre cuando un futuro está listo para avanzar (es decir, tiene trabajo por hacer) pero no es "polled" (interrogado) por el executor (el
Cómo funciona el planificador de Go
El sistema de planificación (scheduler) de Go es un componente crucial del runtime que gestiona la ejecución concurrente de goroutines, que son funciones ligeras que pueden ejecutarse simultáneamente. Dado que el número de goroutines puede superar con creces el número de núcleos de CPU disponibles,
Go: Contextos cancelados, ahora con más detalles
En Go, los errores de contexto cancelado o vencido son comunes, pero a menudo carecen de información crucial sobre la causa subyacente. Esto dificulta la depuración y la respuesta a incidentes en producción. El artículo aborda este problema, introduciendo las funciones `WithCancelCause` (Go 1.20) y
Scala: Concurrencia optimizada con técnica inspirada en Haskell
Este artículo explora una técnica avanzada para mejorar la concurrencia en Scala, inspirada en el lenguaje Haskell y su biblioteca Haxl. El problema que aborda es cómo optimizar la ejecución de múltiples consultas de datos, evitando una serie de llamadas secuenciales a la base de datos. En Haskell,
Python Asyncio: Errores comunes al compartir estado
Este artículo del blog de Inngest explora un problema común en Python asyncio: la coordinación de tareas concurrentes que comparten estado. La biblioteca estándar ofrece `asyncio.Event` y `asyncio.Condition`, pero ambos tienen limitaciones que se manifiestan bajo presión de concurrencia real. El art
Flujos de trabajo nativos en Go: un desafío resuelto
Este artículo de DBOS.dev explora cómo construir una biblioteca de flujos de trabajo en Go que se sienta natural y familiar para los desarrolladores de Go, abordando las limitaciones inherentes al lenguaje en este tipo de tareas. El desafío principal radica en combinar la potencia de Go (soporte par
Sistemas concurrentes: ¿por qué Erlang sigue siendo clave?
Este artículo de Variant Systems explora por qué los sistemas basados en procesos, como los que utiliza Erlang/Elixir (BEAM y OTP), siguen siendo relevantes y efectivos en la construcción de sistemas concurrentes y distribuidos, especialmente en el contexto de la inteligencia artificial y los agente
Asignador de memoria en Go: cómo funciona
El artículo "The Memory Allocator" de internals-for-interns.com explica cómo funciona el asignador de memoria del runtime de Go, un componente crucial para el rendimiento y la eficiencia del lenguaje. Imagina al asignador como un 'administrador de almacenes': Go necesita 'cajas' (memoria) de diferen
Lecturas bloqueadas: ¿el cuello de botella oculto?
Este artículo explora una paradoja contraintuitiva en la programación concurrente: en ciertas situaciones, las lecturas bloqueadas (read locks) pueden ser *más lentas* que las escrituras bloqueadas (write locks). El autor, al optimizar una caché de tensores de alto rendimiento llamada Redstone en Ru
Go 1.24: sync.Map optimizado con nueva estructura
A partir de Go 1.24, la implementación interna de `sync.Map` en la biblioteca estándar de Go ha sido rediseñada para mejorar el rendimiento de la concurrencia, utilizando ahora una estructura llamada HashTrieMap. Esta estructura combina una tabla hash con un trie, permitiendo lecturas sin bloqueo (l
C++17: Optimiza el acceso concurrente con shared_mutex
Este artículo explica `std::shared_mutex`, una herramienta valiosa introducida en C++17 que optimiza el acceso concurrente a datos compartidos, especialmente en escenarios de lectura intensiva. Comienza con un ejemplo básico: un contador que se incrementa y se lee por múltiples hilos, utilizando `st
Rust en GPU: Async/await facilita la programación
VectorWare ha anunciado un hito significativo en la programación de GPU: la capacidad de utilizar las características `async/await` de Rust directamente en la GPU. Esto representa un avance importante hacia la visión de la empresa de facilitar a los desarrolladores la creación de aplicaciones de alt
PostgreSQL: Fallos silenciosos en datos financieros
Un artículo de lirbank.com advierte sobre una vulnerabilidad común en bases de datos PostgreSQL que puede llevar a errores financieros silenciosos. Estas 'condiciones de carrera' ocurren cuando dos transacciones concurrentes leen el mismo valor (por ejemplo, el saldo de una cuenta), lo calculan inde
Discord Revela Secretos de su Escalabilidad
Este artículo de Fullstack.zip analiza cómo Discord, una plataforma de comunicación popular, logra su rendimiento, escalabilidad y fiabilidad a gran escala, soportando billones de mensajes. La clave de su arquitectura reside en el uso del **Modelo de Actor**, un patrón de diseño que ha evolucionado
Rust: Hibana asegura protocolos con nuevos tipos de sesión
Hibana es un proyecto innovador para Rust que introduce el concepto de *Tipos de Sesión Multipartita Afines* (Affine Multiparty Session Types - MPST) para garantizar la corrección y seguridad de protocolos de comunicación a nivel de compilador. En esencia, permite que el compilador Rust *pruebe* que
Go: Nueva librería facilita la depuración de bloqueos
Desarrolladores de Go han lanzado 'deadlog', una nueva biblioteca diseñada para simplificar la depuración de bloqueos de mutex, un problema común en aplicaciones concurrentes. La biblioteca, disponible en GitHub, permite a los programadores reemplazar `sync.Mutex` y `sync.RWMutex` con `deadlog.Mutex
Microsoft crea índice más eficiente para bases de datos
La noticia describe BF-Tree, una nueva estructura de índice desarrollada por Microsoft Research que busca optimizar el rendimiento de las bases de datos al reducir la amplificación de escritura y el desperdicio de memoria. BF-Tree reemplaza el almacenamiento en página tradicional de 4KB con mini-pág
