gpt4 book ai didi

java - 一旦选择器返回,我可以从 channel 读取多少和多长时间?

转载 作者:行者123 更新时间:2023-12-03 11:52:19 24 4
gpt4 key购买 nike

假设我有一些 UDP channel 和一些 TCP channel 注册到我的选择器。一旦选择器唤醒,我是否可以继续循环并从所有键(不仅仅是选定的键)中读取尽可能多的信息,而无需循环返回并执行另一个选择()?对于 TCP,这没有多大意义,因为我可以通过调用 channel.read() 将尽可能多的内容读入我的 ByteBuffer,但对于 UDP,您只能通过调用 channel.receive() 一次读取一个数据包.那么我读取了多少数据包?您是否看到仅继续阅读(不仅仅是阅读,而是写作,连接和接受,换句话说,所有按键操作)直到没有其他事情可做然后我再次执行选择的问题?这样 UDP channel 就不会饿死其他 channel 。您将尽可能多地处理所有 channel ,一次从 UDP channel 读取一个数据包。我特别担心:

1)如果我可以在没有它的情况下继续处理我的 key ,那么执行太多选择的性能会受到影响。

2) select() 是否做了一些我无法绕过的基本操作以保持读/写/接受/连接?

同样,请记住,我将处理所有键,而不仅仅是选择的键。如果某个键(无数据)无事可做,我就什么也不做,然后继续下一个键。

最佳答案

我认为你必须同时尝试两种方式。您可以构造一个合理的参数,说明您应该读取每个可读 channel 直到 read() 返回零,或者您应该每个 channel 处理一个事件并且每次只执行一次读取。我可能更喜欢第一个,但我记得我什么时候不喜欢。

Again, keep in mind that I will be processing all keys and not just the ones selected.



为什么?您应该处理选定 channel 上的事件,然后您可能希望对非选定 channel 执行超时处理。我不会把这两件事混为一谈,它们是完全不同的。不要忘记从 selectedKeys 中删除 key 设置任何你做的方式。

关于java - 一旦选择器返回,我可以从 channel 读取多少和多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9984471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com