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

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

    class TcpLink implements Runnable {

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

如果需要允许多个线程分派(dispatch)传入的消息,应如何更改此类?

谢谢!

最佳答案

我非常喜欢this Doug Lee presentation关于基于Java NIO设计可伸缩系统。

本质上,您的设计通常基于Reactor pattern,通过该ojit_a可以在多个客户端连接上循环运行一个I/O线程。如果I/O线程饱和,则可以考虑取消从主 react 堆到一个或多个子 react 堆的连接;每个 react 堆都有自己的线程。

设计中要注意的另一个重要点是,I/O线程应该仅执行I/O ,并且通常应将所有入站消息分派(dispatch)到单独的线程(例如ExecutorService)以执行任何实际工作。这样可以防止在处理给定消息时其他连接因I/O不足而被占用。

关于java - 如何扩展此单线程Java客户端?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2111307/

10-11 22:25
查看更多