NIO与IO的流程梳理
IO与NIO详解----面试整理 在java种我们所说的IO与NIO其实是java对操作系统的IO模型的封装而产生的接口,是我们开发人员不必关注操作系统层面的知识。 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。 传统的BIO模型 一请求一应答,客户端发起socket连接,服务端通过serversocket进行连接。但是对于多个连接请求这样的模型就没法处理了这样衍生出来的就是多线程了。 多线程处理多对多 多个连接请求发送到服务端后,服务端每收到一个请求就开一个线程去为这个请求建立连接,这样就可以完成多连接请求的需求了。 **问题一:**为什么采用多线程,而不一个一个处理连接请求呢? 答:由于socket的accept、read、write方法都是阻塞的,如果一旦一个连接需要很长时间的读写,那么后续的连接就无法及时的响应了。 **问题二:**多线程的方式有什么问题,该如何解决? 答:采用多线程去解决这种场景的问题一旦请求量过大的时候就会无休止的创建线程,但线程资源很宝贵,在linux种进程的本质就是线程,所以一旦创建一个线程调用的是系统及的函数,开销很大