Benchmark a GoLang: servidor web en Go vs Python

Translate to:English

Benchmark GoLang vs Python

Benchmark GoLang vs Python

Manos a la obra. Una de las principales motivaciones de GoLang (el lenguaje de programación Google) es obtener en un sólo lenguaje la flexibilidad y rápido desarrollo que proporciona Python pero con la velocidad que un código nativo como C proporciona.

Quiero comprobar esto con un ejercicio inmediato y práctico: hacer un benchmark comparando un servidor web en python contra otro en GoLang.

Las herramientas que he usado son:

  • Servidor web simple en Python (Python 2.5.2) [Fuente]
  • Servidor web simple en GoLang (GoLang hg 10/11/2009 snapshot) [Fuente]
  • Apache HTTP server benchmarking tool (ab v2.3)

La máquina donde he ejecutado los tests es:

  • Intel Core 2 Extreme X9770 3.2 Ghz
  • Ubuntu 8.10 Intrepid amd64
  • Kernel 2.6.27-15-generic

Vamos allá.

  1. Copy/paste del código de ejemplo del servidor web para GoLang (con modificación de la plantilla)
  2. Copy/paste del código de ejemplo del servidor web para Python (con modificación de la plantilla)
  3. Compilamos el código GoLang
    % 6g webserver.go
    % 6l -o webserver.out webserver.6
  4. Lanzamos el servidor web en GoLang
    % ./webserver.out
  5. Ahora lanzamos el test para 40.000 peticiones con nivel de concurrencia 8 (ese nivel de concurrencia da un mínimo local en tiempo total de respuesta)
    % ab  -n 40000 -c 8 http://localhost:1718/
  6. Matamos el servidor y lanzamos ahora el de Python
    % python webserver.py &> /dev/null
  7. Aplicamos el test anterior
    % ab -n 40000 -c 8 http://localhost:1719/
  8. Por último comparamos los resultados

GoLang:

Concurrency Level:      8
Time taken for tests:   4.849 seconds
Complete requests:      40000
Failed requests:        0
Write errors:           0
Total transferred:      5760000 bytes
HTML transferred:       3400000 bytes
Requests per second:    8248.51 [#/sec] (mean)
Time per request:       0.970 [ms] (mean)
Time per request:       0.121 [ms] (mean, across all concurrent requests)
Transfer rate:          1159.95 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       2
Processing:     0    1   1.4      1      42
Waiting:        0    1   1.4      1      42
Total:          0    1   1.4      1      43
Percentage of the requests served within a certain time (ms)
50%      1
66%      1
75%      1
80%      1
90%      1
95%      1
98%      8
99%     10
100%     43 (longest request)

Python:

Concurrency Level:      8
Time taken for tests:   10.644 seconds
Complete requests:      40000
Failed requests:        0
Write errors:           0
Total transferred:      8000000 bytes
HTML transferred:       3360000 bytes
Requests per second:    3758.13 [#/sec] (mean)
Time per request:       2.129 [ms] (mean)
Time per request:       0.266 [ms] (mean, across all concurrent requests)
Transfer rate:          734.01 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     0    2  33.8      1    6448
Waiting:        0    2  33.8      1    6448
Total:          0    2  33.8      1    6448
Percentage of the requests served within a certain time (ms)
50%      1
66%      2
75%      2
80%      2
90%      2
95%      2
98%      2
99%      2
100%   6448 (longest request)

Conclusión:

En este sencillo test (poco riguroso, la vedad), el servidor de Python tarda en servir 40.000 solicitudes 10,644 segundos, mientras que el servidor web GoLang tarda 4,849 segundos.

El servidor web GoLang es 119% más rápido.

Requests/s GoLang vs Python

Requests/s GoLang vs Python

Entradas relacionadas:

GoLang, nuevo modelo de programación
GoLang no es para Windows


Translate to:English
MenefanteMenéame TwitterTwitter

7 Responses to Benchmark a GoLang: servidor web en Go vs Python

  1. kzok dice:

    #Offtopic – pues apenas hoy encontra tu blog y ps me gustaron los pocos articulos que pude ver- ahora sobre el post pues al parecer google tiene en sus manos un lenguaje muy rapido por no decir que eficiente, yo en lo personal todavia no programare en este lenguaj,e dejare que siga creciendo para ver que sera despues.

    • Gracias kzok, me alegro que te guste el blog. Espero escribir un análisis en detalle sobre esta nueva potencial herramienta de Google.

  2. Pingback: uberVU - social comments

  3. carlosz dice:

    No es tanto como uno esperaría de un lenguaje compilado (parece alrededor de 2x python)…

    Yo hice algunos test comparandolo con genie (lenguaje similar a python que se compila a C) y es mucho más rapido que el Go

    http://charlieman.wordpress.com/2009/11/26/google-go-vs-python-vs-genie/

  4. zorion dice:

    Para @carlosz: ¿Te has leído el comentario de tu post?
    Según lo entiendo yo dice que es asintóticamente incorrecto (yo no lo he probado, que conste).

  5. Pingback: Empezando con golang | atusell::

  6. Pingback: Trabalhando com Go (GoLang), a linguagem do Google - Caderno de estudo TI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: