xie*_*fei 8 java io performance nio
在apache HTTPComponent文档中有一个声明:
与流行的看法相反,NIO在原始数据吞吐量方面的性能明显低于阻止I/O的性能."
真的吗?有人可以更详细地解释一下吗?什么是典型的用例
请求/响应处理需要解耦
当您可以处理请求、将其分派到其他执行上下文(不同的线程、对另一个服务器的 RPC 调用、其他一些异步机制)并释放 Web 服务器的线程以处理更多传入请求时,应使用非阻塞 IO。当响应处理完成时,将调用响应处理线程,并将响应发送到客户端。
我建议阅读netty 文档以更好地理解这个概念。
至于更高的吞吐量:当您的服务器发送/接收大量数据时,所有这些上下文切换以及在线程之间传递数据确实会损害整体性能。可以这样想:您收到一个大请求(带有大文件的 PUT 请求)。您所需要做的就是将其保存到磁盘,然后返回“确定”。开始在线程之间扔掉它可能会导致更多的内存复制操作,如果您只是在同一线程中将其扔到磁盘上,则需要这些操作。以异步方式处理此操作不会提高性能:虽然您可以将请求处理线程释放回Web服务器的线程池并让它处理其他请求,但您的主要性能瓶颈是磁盘IO,在这种情况下 - 尝试同时保存更多文件只会使速度变慢。
我希望我说得足够清楚。如果您需要更多解释,请随时在评论中提出更多问题。