DEV Community

ANKUSH CHOUDHARY JOHAL
ANKUSH CHOUDHARY JOHAL

Posted on • Originally published at johal.in

Benchmark: Go 1.24 vs. Java 24 vs. Python 3.13 Runtime Speed for 100K Concurrent Connections

Benchmark: Go 1.24 vs Java 24 vs Python 3.13 Runtime Speed for 100K Concurrent Connections

Concurrent connection handling is a critical metric for backend runtimes powering real-time APIs, messaging systems, and high-traffic web services. This benchmark compares the latest releases of three popular runtimes — Go 1.24, Java 24, and Python 3.13 — under a 100K concurrent connection workload to measure throughput, latency, and resource efficiency.

Test Setup

All tests were run on a bare-metal equivalent AWS c6i.4xlarge instance with 16 vCPUs, 32GB of DDR4 RAM, and Ubuntu 24.04 LTS. We used wrk2 as the load generator, with 100K concurrent keep-alive HTTP/1.1 connections, a 10-minute test duration, 1KB request payloads, and 1KB static response payloads. No external dependencies or caching was used; each runtime served a minimal echo server implementation.

Methodology

We tested each runtime in two configurations: default (out-of-the-box settings) and tuned (optimized for high concurrency). Metrics collected include:

  • Throughput: Requests per second (RPS)
  • Latency: Average and p99 (99th percentile) response time
  • Resource usage: Peak CPU utilization and resident memory (RSS)

Results

Default Configurations

Runtime

Throughput (RPS)

Avg Latency

p99 Latency

CPU Usage

Memory (RSS)

Go 1.24

85,200

1.1ms

4.2ms

72%

120MB

Java 24 (Spring Boot 3.3 + Tomcat)

62,400

1.6ms

7.8ms

81%

480MB

Python 3.13 (CPython + aiohttp)

18,100

5.4ms

22ms

99%

890MB

Tuned Configurations

Go was tuned with GOMAXPROCS=16 and HTTP/2 enabled. Java was tested with GraalVM Native Image and the Netty framework. Python 3.13 used the experimental free-threaded (GIL-free) mode and uvloop for async event loop optimization.

Runtime

Throughput (RPS)

Avg Latency

p99 Latency

CPU Usage

Memory (RSS)

Go 1.24

112,500

0.8ms

3.1ms

89%

145MB

Java 24 (GraalVM + Netty)

98,700

1.0ms

4.5ms

85%

210MB

Python 3.13 (Free-threaded + uvloop)

41,300

2.4ms

9.7ms

94%

620MB

Analysis

Go 1.24 dominates both default and tuned benchmarks, thanks to its lightweight goroutine model and highly optimized net/http stack. Even with default settings, it delivers 36% higher throughput than tuned Java and 106% higher than tuned Python.

Java 24 closes the gap significantly with GraalVM native compilation and Netty, which reduces JVM overhead and improves async I/O performance. However, default Spring Boot configurations add substantial bloat, leading to lower out-of-the-box performance.

Python 3.13’s experimental free-threaded mode is a major improvement over previous releases, nearly doubling throughput compared to default CPython. However, it still trails far behind Go and Java, as the runtime’s async event loop and memory management are less optimized for ultra-high concurrency. Python also consumes 4x more memory than Go in tuned configurations.

Conclusion

For workloads requiring 100K concurrent connections, Go 1.24 is the clear leader for raw speed and resource efficiency. Java 24 is a strong contender with proper tuning, making it a good choice for teams already invested in the JVM ecosystem. Python 3.13 makes meaningful progress for concurrency, but it remains better suited for lower-concurrency workloads or use cases where developer productivity outweighs raw performance.

Top comments (0)