我通常使用Python来构建Web 应用。一年前,在兴趣的驱使下,我开始学习Go。

在此期间,我重写了一些原本由C 开发的CGI 应用,包括运行于 chroot 环境下的同 thttpd 服务器一起的应用。我开始寻找可以开发易于 chroot、且内置 Web 服务器的独立 Web 应用的工具。那时,我开始玩 web.go 框架、mustache.go

模板、Go 原生 http 包和 GoMySQL 数据库 API。我发现,有 http、mustache.go GoMySQL 包的 Go 可以是我用来工作的不错的工具组合。因此,我决定使用Go编写我的应用。(Go编程语言也可以用来编写Web应用?)

在工作过程中发现,我需要比 mustache.go 更加灵活,比 GoMySQL 更加成熟、没有那么多 Bug 的东西。最终,我使用 Kasia.go 模板和 MyMySQL (为我的应用定制开发的包,不过我将其贡献给了 Go 社区)。重写的应用即便是在比以前的负载更高的运营环境下,也工作得很好。我开始思考这个问题:用 Go 实现独立 Web 应用比 Python 到底快了(或者是慢了)多少。我决定做一些各种框架和服务器不同的用途的测试。为了比较,我选择了下面的 Go 包:

◆ 原始的 Go http包;

◆ web.go 框架(它使用运行于独立模式[standalone mode] 的 http 包);

◆ twister 框架 (它同样使用 http 包)。

和下面的 Python Web服务器/框架:

◆ 使用 CherryPy WSGI 服务器的 web.py 框架;

◆ 使用 flup FastCGI 做 nginx 服务器的后台处理的 web.py 框架;

◆ tornado 异步服务器/框架;

◆ nginx 做负载均衡的 tornado。

每一个用例,我都编写了一个小应用,略微复杂一些的、传统的 Hello World 例子。任何应用都包括:

◆ 使用正则表达式通过 URL 路径传递参数;

◆ 使用语句创建多行输出;

◆ 使用 printf 形式的格式化函数/表达式格式化输出。

我想,这些都是在 Web 应用中常见的操作,所以应当包含在任何简易的性能对比测试中。所有测试应用的代码在下面的链接中:

测试环境

测试环境包括两台 使用千兆以太网链接的PC (请求发起者和应用服务器)。

◆ 请求发起者:2 x Xeon 2.6 GHz with hyperthreading, Debian SID, kernel: 2.6.33.7.2-rt30-1-686 #1 SMP PREEMPT RT;

◆ 服务器: MSI Netbook with two core Intel U4100 1.30GHz, AC power connected, 64-bit Ubuntu 10.10, kernel: 2.6.35-25-generic #44-Ubuntu SMP, Python 2.6.6-2ubuntu2, web.py 0.34-2, flup 1.0.2-1, tornado 0.2-1, nginx 0.7.67-3ubuntu1;

为了产生 HTTP 请求并且评估测试应用的性能,我使用 siege 性能测试工具。Siege 可以用多线程模拟多个用户。我使用了下面的命令产生请求:

siege -c 200 -t 20s http: //SERVER_ADDR :8080 /Hello/100

或者多个类似的命令,减少参数 -c 的量(在这个测试中,我同时运行了多个 Python 脚本)。它模拟了 200 用户的请求,并持续 20 秒。这个 URL 使得 Web 应用对每个请求都输出 100 行。Go 应用使用 Go 发布版 2011-02-01.1。

结果

GOMAXPROCS=1, 一个 Python 进程:

框架

请求速率 [1/sec]

Go http

1350

Twister

1324

Web.go

1141

Tornado

882

Tornado+nginx

862

Web.py+CheryPy

169

Web.py+nginx

114

GOMAXPROCS=2, 两个 Python 并发进程:

GOMAXPROCS=4, 四个 Python 并发进程:

Web.py+nginx 工作的 flup FastCGI 选项:multiplexed=False, multithreaded=False。如果 multiplexed=True 它会运行得慢一些。如果 multithreaded=True 而只有一个进程服务于 nginx 服务器,会报下面的错误:

结论

你可以看到 Go 赢得了几乎所有的测试用例。web.go 框架的那个不太理想的结果可能是由于它先尝试用指定的 URL 寻找静态页面,然后才会执行处理方法。让我惊讶的是 tornado Python 框架如此之高的性能,尤其是跟 web.py 框架相比而言。我同样对 CherryPy 服务器比 nginx+flup 快感到惊讶 (我使用 web.py+flup+nginx 跑几乎所有的 Python Web 应用)。

go和python性能对比_Go和Python Web服务器性能对比相关推荐

  1. Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程

    Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论 一.http_load 程序非常 ...

  2. linux web 服务器性能,Linux系统Web服务器性能测试(2)

    2.系统内存的影响 在linux系统下,有一点需要注意:对于某些BIOS来说,如果超过64MB内存就需要在LILO.CONF中加入扩展内存的命令,否则服务器内存显示只有64MB.我们对64MB内存和1 ...

  3. 如何测试web服务器性能,如何执行Web服务器性能基准测试?

    本文概述 你知道你网站的平均响应时间吗?你知道你的网站可以处理多少个并发用户吗? 负载测试对于Web应用程序了解网站容量至关重要.如果要选择Web服务器, 那么要做的第一件事就是执行负载测试, 然后看 ...

  4. 软考高级系统架构设计师论文系列三:论改进Web服务器性能的有关技术

    软考高级系统架构设计师论文系列三:论改进Web服务器性能的有关技术 一.摘要 二.缓存服务器和均衡负载设备 三.Web服务器配置 四.三层C/S软件结构设计 一.摘要 某大型图书馆数字化信息系统的设计 ...

  5. 云主机与物理服务器性能对比,云主机和物理服务器的对比

    云主机和物理服务器的对比 内容精选 换一换 当专属主机上的云服务器规格无法满足业务需要时,可参考本章节变更规格,升级云服务器的vCPU.内存.登录管理控制台.单击管理控制台左上角的,选择区域和项目.选 ...

  6. kestrel web服务器性能对比,netcore高性能Web服务器Kestrel分析(示例代码)

    Kestrel是aspnetcore中的web服务器之一,其本身有跨平台,轻量级,高性能的特点 在 ryzen 1600 12核cpu 测试环境中,瞬间每秒处理请求数能达到2w5以上,与netty不相 ...

  7. 服务器ibm3650性能,IBM System x M3系列服务器性能解析

    在上一篇文章中,我们已经介绍了IBM System x M3系列服务器(下文简称M3服务器)的"蓝色品质",不过一台好的服务器不光要设计出色,维护简便,优秀的性能也是同等重要,因此 ...

  8. php性能极限,利用autobench测试web服务器极限并发数

    一.目的 利用autobench工具结合httperf命令对web服务器进行测试,得出该服务器可以承载的最大并发连接数与最佳并发数. 二.测试工具 工具介绍 1.Httperf httperf 是一款 ...

  9. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...

最新文章

  1. Oracle OS Block Header
  2. Spring Boot + Mybatis 实现动态数据源
  3. weed mount 之后出现文件删除不掉
  4. 自定义PocketMod的农历页面
  5. curl有php内存缓存,PHP CURL内存泄露的解决方法
  6. 漫步线性代数十一—— 四个基本子空间
  7. html网页设计课程的思维导图,UI设计初级教程学哪些?课程大纲和思维导图分享给你!...
  8. 目前最完整的前端框架 Vue.js 全面介绍
  9. VB.net小技巧——ClickOnce应用程序版本号自动递增
  10. RePast J介绍
  11. 标准正态分布怎么算_标准正态分布密度函数计算公式怎么算、
  12. art-高光贴图制作
  13. 数据结构试卷及答案(七)
  14. mysql高并发和大流量_高并发-高并发和大流量解决方案
  15. 修改const指针所指向的值
  16. mysql 1.4安装步骤_从零开始搭建系统1.4——MySql安装及配置
  17. project-clean的作用
  18. Java基于JSP二手书交易平台设计与实现
  19. 分布式系统平台-Azure Service Fabric
  20. 排查相机功耗问题时,影响静态亮屏功耗的几个因素

热门文章

  1. 飞秋下载2010正式版最新
  2. 除了写代码,程序员必备的6种软技能
  3. 程序员的七夕:转给此刻你想起的那位!
  4. python必备神器_Python 必备神器
  5. 特征匹配 + 单应性查找对象
  6. iMeta | 华中科大宁康组综述宏基因组数据用于蛋白质三维结构预测的方法论
  7. Acoustica 7 Premium Edition for Mac(音频处理软件) v7.3.28
  8. 良心推荐:高品质音乐播放器Audirvana for Mac
  9. 人工智能 量子力学 时间简史 山海经 三体
  10. 第44课 角谷猜想 动动脑 第3题 完善程序