学习epoll注意什么?

为当前最终发行版之前的所有版本提供支持
回复
头像
jingying12
帖子: 36
注册时间: 2008-07-02 15:43
送出感谢: 0
接收感谢: 0
联系:

学习epoll注意什么?

#1

帖子 jingying12 » 2008-07-03 10:25

我的任务是学习epoll,应该注意什么,有什么合适的学习方法呢,希望前辈指点。
头像
greco
帖子: 2487
注册时间: 2007-04-06 10:24
来自: ~/Shanghai
送出感谢: 0
接收感谢: 0

#2

帖子 greco » 2008-07-03 10:51

epoll 是啥,刚才man了一下
man epoll | grep -A1 'NAME'

代码: 全选

NAME
       epoll - I/O event notification facility


好像是select 的替代者

不过楼主你还是学好基础先
http://forum.ubuntu.org.cn/viewtopic.ph ... ht=#824298
http://silenceisdefeat.com/~greco

代码: 全选

''.join([chr(ord(c)-2) for c in 'O{"G/ockn"ku<"itgeq0ujkBiockn0eqo'])
echo -n "Z3JlY28uc2hpQGdtYWlsLmNvbQ==" | base64 -d
头像
kofshower
帖子: 1343
注册时间: 2007-03-13 11:23
送出感谢: 0
接收感谢: 0
联系:

#3

帖子 kofshower » 2008-07-11 18:33

看到有两个人问,干脆一块答了.
Linux提供了/dev/epoll的设备以及后来2.6内核中对/dev/epoll设备的访问的封装(System Epoll),是这样一种IO模型,和window下面的IOCP模型类似,是为了解决大量的连接queue时候,select和poll因为轮询而浪费了大量的CPU时间的一个为了提高IO效率的解决方案。
其本质的思想类似于内核提供了一种信号机制。这个文件描述符有了IO操作的话,由系统通知你。而不是你去用select或是poll轮询。(我记得有本书里面的比喻叫什么你不要问,我来告诉你,这个同样也是window的设计哲学)。

代码: 全选

基本的流程是:
create_epoll(int maxfds);
//创建一个epoll的句柄
nfds = epoll_wait(kdpfd, events, maxevents, -1);
//在服务器的循环中来查询所有的网络接口,看哪一个可以读,哪一个可以写了
//和select的语法像吧之后遍历所有的events
如果是主socket的事件的话,则表示有新连接进入了,进行新连接的处理。
调用的api流程是
accept->setnonblocking/*将新连接置于非阻塞模式 */->将新连接也加入EPOLL的监听队列->
epoll_ctl/*将这个新的event加入到epoll的监听队列里面*/
如果不是主socket的事件的话,则代表是一个用户socket的事件,则来处理这个用户socket的事情
比如读写。。。

使用前先想清楚是不是真的需要以这些为基础搭建服务器。
这个是最值得注意的。因为毕竟这个比写poll加多线程要简单呢。
如果要有工业强度的话,可以看看ACE
貌似最近老喜欢写长句,不懂会不会很绕口。 :em01
"We are all in the mud, but some of us are looking at the stars." (Oscar Wilde)
We are not born for ourselves.
人生天地间,并非为自己
Homepage:http://sites.google.com/site/polarisnotme/
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 weihua2008 » 2008-07-12 14:49

该地儿可以帮助你的,首先你得配置好你的ubuntu
还有我认为应该在你建文件的路径下打开终端
再运行就应该可以了

http://wiki.ubuntu.org.cn/index.php?tit ... iant=zh-cn
回复

回到 “老旧版本支持”