关于nio reactor模式的问题

我一直没搞懂这个reactor模式是怎么实现的。
main reactor每次accept一个新的channel,都会将它交给一个Handler去处理,这个handler接收两个参数,一个是channel,一个是selector。根据网上资料,这个传进来的selector跟main reactor中的selector不是同一个,即所谓的主从selector模式,主selector负责accept,而从selector有多个,负责监听channel是否有读写事件。现在的问题是,主selector是在主线程的一个while(true)循环中跑着,所以它会一直进行select操作,这样就可以不停接收新的channel;但从selector是分配到了每个handler中,这些从selector是什么时候进行select操作呢?是否跟主selector一样也是在主线程的while(true)循环中跑着?
全部评论
reactor会有一个event loop,循环调用Selector#select,并处理selectionKey。 单线程reactor模型,reactor中的selector负责监听所有channel事件,包括OP_ACCEPT/OP_READ/OP_WRITE等; 主从reactor模型,主reactor的selector只负责监听OP_ACCEPT,实际的IO操作由从reactor完成,从reactor的selector负责监听OP_READ。 具体可以参考Netty的实现
点赞 回复 分享
发布于 2017-08-24 16:49
不是监听事件么,有四个感兴趣的时间,连接成功,读。。。当进行这些操作调用监听函数
点赞 回复 分享
发布于 2017-08-24 11:43

相关推荐

1. 请做个自我介绍,包括你的个人背景、大学经历或实习经历。1.1. 在你的学习和实践中,AI大模型工具是如何发挥作用的?是否帮助你解决过具体问题,或提升了某些项目的效率?2. 请你谈谈IPv4与IPv6的区别与过渡策略。2.1 实际过渡过程中,IPv4和IPv6之间互通的关键问题,有哪些技术手段可以实现互通?3. 请你解释一下Java中的垃圾回收机制GC以及常见的垃圾收集器有哪些?3.1 结合实际开发场景,解释在什么情况下你会选择使用G1垃圾收集器,而不是CMS或其他收集器?3.2. G1垃圾收集器是如何优化停顿时间的?它在设计上有哪些特点,使其适合大内存应用?4. 请你谈谈分库分表的常见策略及其在并发场景下的应用。4.1. 在高并发场景下,如何选择合适的分库分表策略?具体会考虑哪些因素来决定使用垂直还是水平分库分表?4.2 实际应用中,垂直分库和水平分库可能会遇到哪些挑战?你会如何应对这些挑战?5. 设计一个简单的项目管理系统,请描述项目、任务、成员的关系及主要的数据库表结构。5.1. 在项目管理系统的设计中,如何确保任务的分配和成员的工作负载是合理的?5.2. 在这个项目管理系统中,如何处理任务的优先级和紧急情况?6 设计一个文本生成HTTP接口供业务方调用,设计请求与返回关键字段,至少包含输入上下文、模型参数、输出结构、错误码以及用于追踪的一次调用ID。该文本生成接口如何支持流式返回?(这道题我换成下面的第六题了)6. 做成本控制,把每次调用成本拆到业务维度,后端如何统计token用量、工具调用次数、重试次数,并按业务方场景、模型版本做聚合报表?6.1. 在设计存储上述统计信息的数据库表时,如何考虑数据的扩展性和性能问题?第十四题是问答题,可以有换题的机会。我以为前面也有换题的机会,结果没有😭,对于IPv4和IPv6的过渡策略刚好考到我了,回答不出来还一直追问可能是我回答的时候太长了,应该还有个第七题,可惜错过了,第七题应该会问日常点的问题
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务