gpt4 book ai didi

java - 并发处理 java.nio.channels.Selector

转载 作者:搜寻专家 更新时间:2023-11-01 01:30:32 26 4
gpt4 key购买 nike

我正在使用 java.nio.channels.Selector,我想为每个准备读/写/接受的 selectedKey 创建一个单独的线程,但我想确保永远不会处理同一个套接字同时通过两个不同的线程。最好的方法是什么?我想在创建处理它的套接字的线程之前取消每个 selectedKey,并在线程完成它的生命后将套接字重新注册到选择器,但我/我不确定这会有多高效......

最佳答案

Doug Lea 真的很棒 presentation关于 Java 中的可扩展 I/O,我在构建服务器时遵循了这一点。我采用以下方法:

我的“ react 器”中有一个单独的 I/O 线程,它只执行 I/O(以及非常基本的解码/编码);它只是在字节和消息对象之间进行转换,然后将传入的消息对象传递给线程池以进行业务逻辑处理。我强烈推荐这种方法 - 除非你的 I/O 线程变得饱和,否则不需要超过一个 I/O 线程,我想大多数 I/O 瓶颈是因为它占用了其他处理放在这个线程上。

如果您可以证明您的 I/O 线程已饱和,您可以遵循演示文稿中建议的“多 react 器”模式,其中主 react 器接受传入连接,然后将它们交给执行处理的子 react 器。每个子 react 器在总连接的一个子集之间多路复用,因此不存在多个线程与给定的 SelectionKey 交互的危险。

关于java - 并发处理 java.nio.channels.Selector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027417/

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