La pregunta#
Go y Python resuelven concurrencia con modelos diferentes. Las goroutines distribuyen trabajo mediante el runtime de Go; asyncio coordina corrutinas dentro de un event loop. La pregunta útil no es cuál lenguaje “gana”, sino cómo cambia el costo operativo cuando aumenta la concurrencia.
El diseño compara dos servicios equivalentes, no dos ecosistemas completos.
El escenario de prueba#
Cada servicio expondría un endpoint HTTP que espera una respuesta simulada de base de datos y devuelve el mismo JSON. La carga aumentaría de 100 a 1,000 conexiones concurrentes para registrar memoria residente, throughput y latencia p95.
wrk -t8 -c1000 -d60s http://service:8080/resource
Para que la comparación sea útil deben mantenerse constantes la máquina, duración, payload, límites de CPU y versión del runtime.
Qué medir#
- Memoria en reposo y durante el pico.
- Latencia p50, p95 y p99.
- Throughput sostenido, no solamente el máximo instantáneo.
- Errores y timeouts durante saturación.
Cómo interpretar el resultado#
Una diferencia de memoria no convierte automáticamente una implementación en la mejor opción. También cuentan la velocidad del equipo, las bibliotecas disponibles y la facilidad de observar el sistema en producción.
El resultado debe orientar una decisión concreta: capacidad por instancia, costo de infraestructura o margen disponible antes de escalar.
Conclusión#
Go y Python pueden comportarse de manera distinta bajo carga, pero la decisión depende también del ecosistema y del equipo. Ejecutar el benchmark con un entorno publicado reduciría incertidumbre; esta guía define cómo hacerlo sin presentar resultados que todavía no se han medido.
