协程才是未来-性能夸张的协程服务器,基于eventlet(greenlet)的http性能测试

早上好友baojing.jiao发来消息跟我讨论eventlet。早就知道有这么个玩意,一直没空看。正好今天试试。发现其给出的聊天服务器的例子还算简单,就自己改改做出个http服务器的例子。一测性能才发现如此夸张。

 

先看程序:

 

#! /usr/bin/env python
# -*- coding: UTF-8 -*-
# File: eventlet_httpd.py
# Date: 2009-08-07
# Author: gashero

"""
一个使用eventlet作为底层的http服务器,测试一下性能
"""

from eventlet import api

def httpd(writer,reader):
    req=''
    while True:
        chunk=reader.readline()
        if not chunk:
            break
        req+=chunk
        if chunk=='\r\n':
            break
    data='Hello world!\r\n'
    writer.write('HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s'%(len(data),data))
    writer.close()
    reader.close()
    return

def main():
    try:
        server=api.tcp_listener(('0.0.0.0',3000))
        print 'Server started!'
        while True:
            conn,addr=server.accept()
            #print 'client %s connected!'%repr(addr)
            writer=conn.makefile('w')
            api.spawn(httpd,writer,conn.makefile('r'))
    except KeyboardInterrupt:
        pass
    return

if __name__=='__main__':
    main()
 


简单的说就是识别http请求报文结束,然后发送响应报文而已。

 

100并发时的apache ab性能测试结果:

 

Concurrency Level:      100
Time taken for tests:   17.710 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      5300000 bytes
HTML transferred:       1400000 bytes
Requests per second:    5646.57 [#/sec] (mean)
Time per request:       17.710 [ms] (mean)
Time per request:       0.177 [ms] (mean, across all concurrent requests)
Transfer rate:          292.25 [Kbytes/sec] received

 

1000并发时的apache ab性能测试结果:

 

Concurrency Level:      1000
Time taken for tests:   16.422 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      5300000 bytes
HTML transferred:       1400000 bytes
Requests per second:    6089.30 [#/sec] (mean)
Time per request:       164.223 [ms] (mean)
Time per request:       0.164 [ms] (mean, across all concurrent requests)
Transfer rate:          315.17 [Kbytes/sec] received

 

如上测试环境是分别在1G局域网内两台机器之间的测试,可不是同一台机器内部的测试 。而且,1000并发居然比100并发速度还要快一些。

 

下面给出一些对比数据,测试环境不同,但是数据不会相差太大:

1、大部分python web framework,600req/s

2、web.py,800req/s

3、曾经在土豆网用twisted写的htmid框架,2300req/s

4、nginx+mod_wsgi,2900req/s

5、eventlet,约5800req/s

 

当然,如上的服务器功能确实少了点,但是提供了这样一种基础,方便以后扩展。记得N年前看过一篇论文说服务器的发展是多进程=>多线程=>异步=>协程。而现在主流的高性能服务器都是基于异步的(lighttpd、nginx),这次试了一下协程,效果果然不同凡响。

 

过段时间试试用eventlet提供服务器做个wsgi/http服务器来玩。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值