我正在编写一个Java服务器,它使用普通套接字从客户端接受连接。我使用相当简单的模型,在其中每个连接都有自己的线程以阻塞模式从中读取。伪代码:
handshake();
while(!closed) {
length = readHeader(); // this usually blocks a few seconds
readMessage(length);
}
cleanup();
从Executors.newCachedThreadPool()
创建的线程,因此启动它们不应该有任何显着的开销。
我知道这是一个有点幼稚的设置,如果线程是专用的操作系统线程,它并不会很好地扩展到许多连接。但是,我听说Java中的多个线程可以共享一个硬件线程。这是真的吗?
在Linux上使用Hotspot VM,在具有8个内核和12GB RAM的服务器上使用这种设置,您认为这种设置是否适合处理数千个连接? 如果不是,有什么替代方案?