zoukankan      html  css  js  c++  java
  • 初试Gevent – 高性能的Python并发框架

    Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效。

    于greenlet、eventlet相比,性能略低,但是它封装的API非常完善,最赞的是提供了一个monkey类,可以将现有基于Python线程直接转化为greenlet,相当于proxy了一下(打了patch)。

    今天有空就迫不及待的试一下效果。

    1、安装

    Gevent依赖libevent和greenlet,需要分别安装。

    至此,安装完毕。

    2、测试代码:XML-RPC

    这里必须使用支持线程的XML-RPC,否则无法发挥gevent的优势!

    传统版本:
    需要说明的是,这个并很多资料描述的非单线程,而是一个select版本,所以某些时候比线程版本性能好。


    线程版本:3、测试客户端
     4、gevent的monkey包装后的XML-RPC

    monkey是非入侵式的patch,只需要显示调用你需要patch的东西就行了,别看我用了三行,其实可以patch_all()的

     

    5、测试结果

    现在只有一台机器,下午去实验室两台机器跑了以后,放上结果。对gevent还是比较寄希望的,希望不要太差。。

    客户端的特殊配置:
    echo -e ‘1024t65535’ | sudo tee /proc/sys/net/ipv4/ip_local_port_range
    echo 1 | sudo tee /proc/sys/net/ipv4/tcp_tw_recycle
    echo 1 | sudo tee /proc/sys/net/ipv4/tcp_syncookies
    ulimit -n 10240

    服务器端的特殊配置:
    echo “10152 65535″ > /proc/sys/net/ipv4/ip_local_port_range
    echo 1 | sudo tee /proc/sys/net/ipv4/tcp_tw_recycle
    sysctl -w fs.file-max=128000
    sysctl -w net.ipv4.tcp_keepalive_time=300
    sysctl -w net.core.somaxconn=250000
    sysctl -w net.ipv4.tcp_max_syn_backlog=2500
    sysctl -w net.core.netdev_max_backlog=2500
    ulimit -n 10240

    然后说让大家比较失望的结果:测试效果非常失败,经常出现异常情况,根据我的分析是默认的XML-RPC没有backlog(或者默认太低),导致压力一大,就会fail accept,从而导致RESET(connection refused)。厦门叉车租赁公司
    所以说对monkey的patch不要抱太大希望,他是和原代码密切相关的。

    补充:已经找到修改默认backlog的方法,如下:


    当然测试数据说明,不要过分迷恋monkey,那只是个传说~

    测试数据:
    c=500 n=50000
    默认:2845/s, 8M
    多线程:1966/s, 51M
    gevent:1888/s, 11M

    c=1000 n=100000
    默认:3096/s, 8M
    多线程:1895/s, 52M
    gevent:1936/s, 11M

    c=5000 n=500000
    默认:3009/s, 8M
    多线程:失败,无法创建新线程
    gevent:1988/s, 11M

    c=10000 n=1000000
    默认:2883/s, 8M
    多线程:失败,无法创建新线程
    gevent:1992/s, 20M

    monkey的优点就是:省内存,我是和线程的相比。
    我仔细的分析了一下,XML-RPC使用CPU的比例还是很大的,相比较于直接http的计算,xmlrpc还是属于cpu密集型。
    在这种CPU占用很高,需要反复争夺微greenlet的情况下,gevent并不具有优势。
    或者从另一种角度说,测试机不够强大,喂不饱gevent(可以看到,随着并发线程升高,gevent的性能不降反升,而默认的则在不断下降)

  • 相关阅读:
    理解缓慢变化维(Slowly Changing Dimension)
    分析Reporting Service的报表执行记录
    XCOPY
    Esxi主机从VC断开的怪事
    奇怪的SQLserver执行
    明细表达到15亿了
    现在才知道“quota”
    oledb读取Excel数据丢失原因
    配置subversion
    sql服务器的操作系统升级,数据库如何来迁移呢?
  • 原文地址:https://www.cnblogs.com/xyou/p/8202556.html
Copyright © 2011-2022 走看看