首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择器是如何在内部实现的?

选择器是如何在内部实现的?
EN

Stack Overflow用户
提问于 2011-08-29 19:08:30
回答 3查看 3.1K关注 0票数 14

我刚刚开始探索java NIO,非阻塞IO。我很想知道实现背后的基本原理。Java选择器和物理套接字之间的通信是如何建立的?是否存在持续轮询底层资源的操作系统级线程?是否每个选择器都有任何Java线程不断轮询以接收这些事件?你们谁能给我指一指这个。

EN

回答 3

Stack Overflow用户

发布于 2011-08-29 19:19:44

不,select的要点是,当没有发生任何事情时,您不必浪费周期轮询。每个操作系统都以这样或那样的方式(通常通过硬件中断)实现此功能,并通过select()系统调用将其提供给用户空间程序。与Java语言的联系在于,如果您使用正确的NIO类和方法,则JVM现在包含的代码将为您调用操作系统的select。但这需要对JVM代码本身进行更改,这不是在NIO之前完全可以在Java中完成的事情。

票数 6
EN

Stack Overflow用户

发布于 2011-08-29 19:19:01

因为文档中没有指定,所以我假设(严格地说)这是依赖于实现的。

然而,在*NIX和Windows中,实现通常直接依赖于select系统调用。此系统调用不是通过派生多个线程实现的。

票数 4
EN

Stack Overflow用户

发布于 2011-08-29 22:18:00

这取决于所使用的操作系统。在Linux上,当前的实现使用的是内核的epoll机制。

通常,底层内核网络系统正在填充或排空套接字的缓冲区,可能是在它的IRQ处理线程上。因此,您正在等待的是内核告诉您缓冲区已准备好填充(写入)或读取要排出(读取)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7229277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档