对于NIO、AIO实际开发中在公司推广开

来源:11-5 三种IO模型的适用场景

布鲁马3518274

2020-11-29

您好,我是一名Android客户端开发者,看完视频中很收益,不过也有几个问题。

**目的:**想要了解公司内的网络IO情况,如果有问题想要优化

有几个问题

  • 现在服务端语言可能对应javagopython等,服务器有nginxtomcat,这么多语言是否都存在不同的IO模型?
  • NIO + 多路复用 感觉也是阻塞式的,使用Selector的优势是在服务端,而在客户端使用他优势不在于阻塞与非阻塞上? (个人感觉站在客户端角度,nio的多路复用的优化在于这个缓冲区数据结构的的优化,而客户端在实际开发中,使用BIO或者NIO,效率差距实际在数据结构上的优势,而不是在阻塞与非阻塞上。因为客户端每一个HTTP请求都会在自己的线程中,每一次请求Reqest到Response响应的过程中必然需要写成阻塞式的)
  • 不管服务端使用哪种IO模型,客户端可以不与之对应,比如服务端使用 nio + 多路复用,客户端使用BIO,这样应该也没有问题?
写回答

1回答

Stannum

2020-11-30

同学你好~感谢你的反馈,看得出来你是很用心在学习??
你的有些问题比较概括,所以我也从大方向上给你提供一些解答和参考,但是在应用时还是要注意具体问题具体分析:
1. I/O模型是抽象出来的模型,它并不因为实现方法的不同而改变。不同的语言可能有不同的库,不同的服务器实现可能有不同的优化方法。但是模型的核心概念是不变的。请注意,我们课程中介绍的是模型最核心最基本的形态。这些模型在实际应用中都有各种“变种”和延伸,比如tomcat服务器真正的实现是比我们的基本NIO模型更复杂的。不过大家还是要先掌握最核心的模型,所有其他的优化都是在核心基础上,根据实际需求而改进的。
2/3. 我觉得这两个问题可以放在一起解答。你说得对,服务器端和客户端不一定要应用同一种模型。我在课程中说过,一定要理解这些模型适用的场景。BIO和NIO都是阻塞式调用,只有AIO是真正的非阻塞式调用。但是NIO却通过selector优化了BIO模型的扩展性缺陷。AIO真正利用了异步I/O,但是它本身的实现会增加程序复杂度,而且真正实现纯异步I/O的操作系统也不多。另一方面,BIO是不是一无是处呢?也未必。BIO的实现简单,开发和维护的成本更低。如果你的应用场景并发度较低,那么伪异步BIO模型也未必不是个好选择。总而言之,一定要具体分析服务器端和客户端各自的需求和场景,来分别选择最适合的模型~

2
1
布鲁马3518274
谢谢,很全面,很受用~
2020-11-30
共1条回复

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程