与旧套接字编程模型相比,使用JavaNIO序列化的利弊

与旧套接字编程模型相比,使用JavaNIO序列化的利弊,java,server,nio,clients,Java,Server,Nio,Clients,我想在使用旧套接字编程模型(每个套接字一个线程)和使用java.nio的新套接字编程模型之间进行选择。当我阅读这篇关于非阻塞套接字体系结构的文章时,我注意到该体系结构是基于来自客户端的请求的序列化 根据本文,客户端应用程序同时执行对服务器的请求。选择器收集密钥,创建密钥,并将其发送到服务器。这篇文章把我弄糊涂了,因为序列化不能支持服务器的可伸缩性 如果有10000个客户端连接到服务器,那么处理客户端的所有子请求应该会有一些延迟。另一方面,我了解到将服务器扩展到1000个客户端的唯一方法是使用ja

我想在使用旧套接字编程模型(每个套接字一个线程)和使用java.nio的新套接字编程模型之间进行选择。当我阅读这篇关于非阻塞套接字体系结构的文章时,我注意到该体系结构是基于来自客户端的请求的序列化

根据本文,客户端应用程序同时执行对服务器的请求。选择器收集密钥,创建密钥,并将其发送到服务器。这篇文章把我弄糊涂了,因为序列化不能支持服务器的可伸缩性

如果有10000个客户端连接到服务器,那么处理客户端的所有子请求应该会有一些延迟。另一方面,我了解到将服务器扩展到1000个客户端的唯一方法是使用java.nio

以下是文章:

这篇文章把我弄糊涂了,因为序列化不能支持服务器的可伸缩性。如果有10000个客户端连接到服务器,那么处理客户端的所有子请求应该会有一些延迟

当有I/O要处理时,NIO线程将全速运行,以物理上可以达到的速度处理数据。保持NIO线程性能的关键是不要在线程上执行任何耗时或阻塞操作。您希望尽可能快地处理每个传入数据

正确地这样做意味着NIO线程将扩展到处理器的速度,这在当今是相当可观的

是的,在某一点上,NIO线程将消耗100%的CPU,无法处理更多的I/O。不过,这一点比传统的阻塞I/O体系结构要高得多。更不用说,您不会有10000多个线程不断地切换上下文并占用大量资源(堆栈空间、OS任务条目等)


如果您真的发现自己达到了一个NIO线程可以处理的极限(这是很少见的),那么添加额外的NIO线程就很容易了。

提供了大量关于在服务器上使用Java NIO包的信息。是一个幻灯片包的pdf,它描述了套接字与nio的方法。另请参阅和,我在那篇文章中没有看到任何序列化,但我确实看到了一些错误。您似乎在私下使用“序列化”。不清楚你在问什么。