注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

widebright的个人空间

// 编程和生活

 
 
 

日志

 
 

windows平台的zeromq在iocp出来之前还是不要用了,默认select性能很差  

2012-11-27 13:09:41|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

默认在Windows平台用的select ,性能很差!在事件循环里面调用select之前初始化fd_set的memcpy消耗额外的16%的cpu资源。


之前用了zeromq做了个传输log的后端,发现 libzmq.dll 占用的cpu比较多,用性能工具分析发现,原来是select的问题。

windows平台的zeromq在iocp出来之前还是不要用了,默认select性能很差 - widebright - widebright的个人空间
 


可以看到这个地方的3个memcpy的占用非常的多。之前一直怎么了解select的性能为什么比较差。看到这个终于清楚了。select函数

http://msdn.microsoft.com/ZH-CN/library/windows/desktop/ms740141(v=vs.85).aspx

要求 这几个输入参数每次都需要初始化,所以这几个memcpy不能避免。


The problem with select()

http://static.usenix.org/event/usenix99/full_papers/banga/banga_html/node3.html 

这里对这个问题有很详细的解析。


Poll 函数

http://static.usenix.org/event/usenix99/full_papers/banga/banga_html/node4.html

避免了这个每次都要初始化的问题,所以性能应该是要的。epoll那些也都没有这个初始化的问题。可以看看 zeromq里面的集中polerl的实现的loop函数

https://github.com/zeromq/libzmq/blob/master/src/select.cpp

https://github.com/zeromq/libzmq/blob/master/src/poll.cpp

https://github.com/zeromq/libzmq/blob/master/src/epoll.cpp


都没有select的这个问题,windows平台没有pol的实现,iocp好像还在开发中? 不知道在哪个zeromq的l版本才能出来。

select的这种性能是不能接受的吧,额外的消耗多了16.5%的cpu啊!


用个asio来重写一下看看吧,其实我也不怎么喜欢 asio,好像每次操作的 handler对象的复制代价也有点大。没办法,自己直接用api更麻烦,本来就看中zeromq的api简单,想不到在windows平台做的不好啊。

  评论这张
 
阅读(1298)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017