python gevent VS go coroutine

针对python-threading、python-gevent和go-coroutine进行压测对比

压测环境

  • 压测机器是我的一台阿里云ECS机器
  • CPU x86_64 单核
  • 内存 1G
  • 操作系统Linux iZ94mudtv23Z 2.6.32-431.23.3.el6.x86_64 Centos 6.5
  • python 2.7
  • go 1.5.1

压测模型

  • 测试不同并发上下文情况下,进程占用内存、CPU的情况
  • 并发数由1000逐步递增到50000

压测数据

虚拟内存

bench_vmem

物理内存

bench_mem

CPU

bench_cpu

压测结论

  • 总体性能比较go-coroutine > python-gevent > python-threading
  • python-threading基本到15000并发数就上不去,可能是系统资源已经到了瓶颈
  • python-gevent在并发数较小时表现不错,随着并发数上涨,内存和CPU的增长也较快
  • python-gevent一开始就吃虚拟内存比较多
  • go-coroutine性能表现出色,随着并发数上涨,内存和CPU占用都维持在比较平稳的水平
  • 总的来说不管是python-gevent还是go-coroutine,在用户态进行的context调度,比内核的threading消耗小很多

测试代码

github代码

Hexo install

折腾了下hexo的环境,用来做自己的markdown博客还是相当不错,还支持github部署。这里讲一下怎么安装。

hexo官网
hexo github地址

安装node.js

hexo是基于nodejs的插件实现,需要先安装nodejs
安装办法参考nodejs官网

安装hexo

npm install -g hexo

初始化blog

例如我的博客目录在/blog/,则cd到目录执行初始化,如下

1
2
3
4
cd ~
hexo init blog
cd blog
npm install

启动hexo-server

1
2
cd ~/blog/
hexo server

hexo会启动一个监听4000端口的http服务器,输出信息

INFO  Hexo is running at http://0.0.0.0:4000/. Press Ctrl+C to stop.

生成静态文件

1
hexo generate

本地查看

在浏览器输入地址http://localhost:4000/,即可看到你的博客页面。

创建文章

1
hexo new "page1"

github部署

github page是github提供的公开网页托管服务。可以把网页push到github仓库,然后可以通过公开域名访问。

hexo支持进行github page部署。具体步骤如下

  1. 在你的github上面创建仓库,名字为’username’.github.io。
    ‘username’为你的github账号。

  2. 配置_config.xml

例如我的github账号为anticpp

1
2
3
4
deploy:
  type: git
  repository: git@github.com:anticpp/anticpp.github.io.git
  branch: master
  1. 部署
1
hexo deploy

note:
如果出现错误信息'ERROR Deployer not found: git',尝试安装以下组件

1
npm install hexo-deployer-git --save

SSH authorization

PS: 写了个工具基于expect做自动交互式的SSH登录autossh.

A要ssh登陆到B,不想输入密码。可以在B建立一个对A的ssh信任关系即可。
SSH的信任关系是通过rsa实现,具体的操作步骤如下:

  • A机器生成rsa key

    • 进入~/.ssh/
    • 运行ssh-keygen,所有的提示都默认回车即可
    • 拷贝公钥,cat id_rsa.pub
  • B机器添加公钥

    • 进入~/.ssh/
    • 把A生成的公钥,添加到authorized_keys
  • 登陆

    • 从A登陆B机器,无需密码

注意:
非root账号的ssh信任关系一直都还不行,网上很多资料都说是文件权限问题,试了下都不行。
所以暂时未解,后面找到原因再跟进到文档。