NIO中,selector,poll,epoll的概念

coder4j 发布于 2016/06/03 08:38
阅读 947
收藏 1

今天刚刚像明白了selector的运作机制,(这里不是问题是我个人的理解,有想看的顺便帮我指正错误,谢谢)

个人对NIO中的Selector的认识是: 这个东西类似快递的分捡员,过来一个快递就把它放到相应的分类区域,没有的话就不停检查有没有快递来。其实维护Selector的线程或许只有一个,所以在selector层面它还是同步的(没有异步的回调机制)。但是每当有一个请求到达等待队列并被Selector轮训到了,就会被它分发下去,这样也就是非阻塞的体现。

下面是问题正文

网上看到NIO中的多路复用的实现有三种,select,poll,epoll。这仨概念我一直不太明白,或者说他们的区别不是很理解。有没有人能简单的说说呢?(百度查到的都在分析linux c源码这不是我想要的啊!!!最后还是不懂。。。能不能简单的举例子或者跟别的做做对比)

加载中
0
xpbob
xpbob
select,poll基本是一样的,epoll没有数量限制,而且epoll是与内核版本相关的,好像是2.6以上才有epoll
xpbob
xpbob
@rpgmakervx 文件描述符数量,当文件描述符都是socket的时候可以理解为链接
coder4j
coder4j
没有数量限制?什么数量限制?链接?
0
Storm-Cai
Storm-Cai
Select模型是说,有线程不断询问内核是否有数据到达, 数据到达就直接拿出来,放到相应的回调上去。而epoll模型却是由内核收到数据以后, 通知相应的监听者。 这两者有本质的差别, epoll是内核原生支持。性能上来讲一定数量级以下,select模型与epoll差距不大, 一定的数量级以上,则epoll性能更高。
返回顶部
顶部