【发布时间】:2011-04-21 11:45:22
【问题描述】:
我正在编写一个 Java 服务器,它使用普通套接字来接受来自客户端的连接。我使用的是相当简单的模型,其中每个连接都有自己的线程以阻塞模式读取它。伪代码:
handshake();
while(!closed) {
length = readHeader(); // this usually blocks a few seconds
readMessage(length);
}
cleanup();
(线程是从Executors.newCachedThreadPool() 创建的,因此在启动它们时不应该有任何重大开销)
我知道这有点幼稚,如果线程是专用的操作系统线程,它就不能很好地扩展到许多连接。但是,我听说 Java 中的多个线程可以共享一个硬件线程。这是真的吗?
知道我将在 Linux 上使用 Hotspot VM,在具有 8 个内核和 12GB 内存的服务器上,您认为这种设置适用于数千个连接吗?如果没有,有什么替代方案?
【问题讨论】:
标签: java multithreading networking io nio