Bar*_*lom 19 java io networking multithreading nio
我正在编写一个Java服务器,它使用普通套接字来接受来自客户端的连接.我正在使用相当简单的模型,其中每个连接在阻塞模式下都有自己的线程读取.伪代码:
handshake();
while(!closed) {
length = readHeader(); // this usually blocks a few seconds
readMessage(length);
}
cleanup();
Run Code Online (Sandbox Code Playgroud)
(线程是从一个创建的,Executors.newCachedThreadPool()所以启动它们不应该有任何重大的开销)
我知道这是一个天真的设置,如果线程是专用的OS线程,它不会很好地扩展到许多连接.但是,我听说Java中的多个线程可以共享一个硬件线程.真的吗?
知道我将在Linux上使用Hotspot VM,在具有8核和12GB RAM的服务器上,您认为这种设置适用于数千个连接吗?如果没有,有哪些替代方案?
这可以很好地扩展到数百个连接,而不是数千个连接.一个问题是Java线程也需要相当多的堆栈(例如256K),并且操作系统在调度所有线程时会遇到问题.
查看Java NIO或framworks,它将帮助您更轻松地开始复杂的工作(例如Apache Mina)