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