首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩展这个单线程的java客户端?

如何扩展这个单线程的java客户端?
EN

Stack Overflow用户
提问于 2010-01-22 01:22:11
回答 2查看 313关注 0票数 1

我正在用Java编写一个Stomp协议客户端,它只有一个线程来处理IO。这意味着线程来回地读写传入的数据到应用程序。我的问题是,如果我将来需要使用多线程和NIO扩展这个应用程序,该如何安排呢?

我的IO处理器线程被称为"TcpLink“链接,它具有以下框架

代码语言:javascript
复制
    class TcpLink implements Runnable {

         public void run() {
            // read data from socket and assign it to  a byte buffer
            // notify the listening application
         }
   }

如果我需要允许多个线程分派传入的消息,这个类应该如何更改?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2010-01-22 01:32:35

在围绕Java NIO设计可伸缩系统方面,我真的很喜欢this Doug Lee presentation

从本质上讲,您的设计通常基于Reactor pattern,即单个I/O线程在多个客户端连接上进行循环。如果I/O线程变得饱和,您可以考虑从主反应器到一个或多个子反应器的连接中断;每个反应器都包含自己的线程。

在您的设计中需要注意的另一个要点是,I/O线程应该只执行I/O,并且通常应该将任何入站消息分派到单独的线程(例如ExecutorService)来执行任何实际工作。这可以防止其他连接在处理给定消息时出现I/O匮乏。

票数 2
EN

Stack Overflow用户

发布于 2010-01-22 01:32:44

更好的做法是编写一个包装类来管理TcpLink类的列表。包装器类的作用是接收传入的消息,并将其分配给一个等待/少量TcpLink实例,您可以计算吞吐量/TPS,并在需要时创建新实例。现在,您将只创建其中的一个,这样它就是一个单独的thereaded。

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

https://stackoverflow.com/questions/2111307

复制
相关文章

相似问题

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