URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 30 » 用epoll替换poll, 关于效率的一个问题请教?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
用epoll替换poll, 关于效率的一个问题请教?
 
 
 
 
 
 
 
 
 
Subject: 用epoll替换poll, 关于效率的一个问题请教?
Author: oldwendy    Posted: 2005-06-29 23:36    Length: 751 byte(s)
[Original] [Print] [Top]
现在的这个程序是:从文件中读入几百个url,然后下载网页,不停循环这两个动作。连接数上限为200,现在是用poll 实现的。也就是,每个合格的url就申请一个连接(如果有空连接的话),然后pollfd.fd=socketfd (这个连接的socket fd), pollfd.event=POLLOUT, 把这个pollfd,放在poll队列中。然后poll( ). 检查每个连接,如果可写,则写http request,然后event置为POLLIN,如果可读,则读取网页,然后这个连接就置为空.

我现在的问题是,随着程序的运行,下载的速度在下降。第一天能下载超过3百万,但3,4天以后,每天连1百万都下不了。我的cpu, memory, bandwidth 都不是问题. 我非常想知道速度下降的原因。如果我用epoll替换poll,能不能解决这个问题。替换后,会用到很多的epoll_ctl, 所以我怀疑效率能否提高.

哪位高手能给些建议,小女子不胜感激!
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: Atu    Posted: 2005-06-30 08:24    Length: 208 byte(s)
[Original] [Print] [Top]
是否是网络速度的问题?

这种问题何必用C编程序?用Shell脚本 + wget处理是否更方便?
反正我以前是经常这么干的

BTW: 把你的最后一句话写在标题,效果会更好 :-)
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: alula    Posted: 2005-06-30 10:47    Length: 102 byte(s)
[Original] [Print] [Top]
好像你的问题不是poll的问题。
继续寻找速度下降的原因吧。要不贴上代码片断大伙来瞧瞧?
----
温故知新
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: teawater    Posted: 2005-06-30 11:23    Length: 316 byte(s)
[Original] [Print] [Top]
“第一天能下载超过3百万,但3,4天以后,每天连1百万都下不了。我的cpu, memory, bandwidth 都不是问题.”
不是问题是什么问题?你在连接慢了以后查过么?
慢了以后把机器重启一下 再重新跑程序看看快不快
如果马上能恢复第一天的状态就查你自己
如果还是3 4天的状态就往上查吧 接入商 网站的问题
----
读了这么多年的书 还是觉得幼儿园好混
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: zhangxp    Posted: 2005-06-30 19:38    Length: 195 byte(s)
[Original] [Print] [Top]
无需用poll或epoll吧。。

连上端口,,直接发送请求,,读取回应就行了。。。

发送或读取失败直接退出!!!


为什么用poll epoll呢???
----
想要不被人拒绝,最好的办法是先拒绝别人。
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: oldwendy    Posted: 2005-06-30 21:56    Length: 942 byte(s)
[Original] [Print] [Top]
谢谢大家的帮助。我说的这个程序我知道国内很多人在用。程序的名字是larbin,研究search engine的crawler的人很多都知道。我的bandwidth是20mbps; server: 1G 内存, 3.26G cpu。运行慢的时候,我用top看,内存和cpu的使用率都不是太高。程序慢的时候,断掉重新开始,速度又会很快。我看bandwidth的使用情况,开始时是12mbps,我运行了13天, 下降到3mbps左右。我运行过很多次,基本都是如此。我的目标是一个月100million网页 (1亿,我算了一下,如果平均网页大小是20k,bandwidth有6-7mbps就可以了。) 可是照这个速度肯定实现不了。我们小组在做一个research,不是商业上的,但是现在这个情况对我们这个小组来说是致命的。
我不帖代码了,(估计我介绍不清楚)。代码在google输入larbin,第一个就可以下载。也许大家说的对,不是poll的问题。程序从头到尾读了很多遍,我是实在不知道怎么解决,所以想请高手给些帮助。我的msn: wenniegao@hotmail.com
再次感谢!(祈祷有人能帮我解决,千万不要长皱纹。鞠躬中...)
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: zhangxp    Posted: 2005-07-01 07:12    Length: 576 byte(s)
[Original] [Print] [Top]
如果真的必须用poll 和或 epoll的话,,

用epoll会比用poll好,尤其在并发数越多的情况下,不然linux 2.6提供epoll有嘛用。。

你搜索 unix高性能网络编程(译名),有这样一篇文章讨论了poll epoll,并对其效率做了对比。。



我觉着你还可以考虑你的程序的一些结构:多进程,多线程,或者多进程预分配,线程池等多种多种结构,那种最适合这种应用??



另外,,请问mm一句:

search engine是将互联网上所有的url都下载到本地,搜索的时候在本地搜索吗???不可想象!!!!!!!!!
----
想要不被人拒绝,最好的办法是先拒绝别人。
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: zhangxp    Posted: 2005-07-01 07:13    Length: 66 byte(s)
[Original] [Print] [Top]
据那篇文章的介绍,,poll随着并发数量的增长,,效率成二次方下降。。
----
想要不被人拒绝,最好的办法是先拒绝别人。
[Original] [Print] [Top]
Subject: Re: 用epoll替换poll, 关于效率的一个问题请教?
Author: oldwendy    Posted: 2005-07-02 23:46    Length: 213 byte(s)
[Original] [Print] [Top]
search engine是将互联网上所有的url都下载到本地,搜索的时候在本地搜索吗???不可想象!!!!!!!!!
------------------------------------

你看google的cache就知道了。下载到本地,然后去建索引。
[Original] [Print] [Top]
« Previous thread
求助:捕捉信号的一个问题
C/C++编程版
30
Next thread »
如何在程序中获取系统的网络设置?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:49, cost 0.055154085159302 ms.