当前位置:   article > 正文

NIO概念和多线程优化_多线程 和 nio方式下载同一个文件效率比较

多线程 和 nio方式下载同一个文件效率比较

网络编程

IO模型

  1. 同步阻塞IO:客户端发送请求,当服务端在等待某个操作的时候,客户端就会被阻塞,直到服务端完成请求。
  2. 同步非阻塞IO:客户端发送请求,当服务端在等待某个操作时,不会阻塞,此时客户端不断轮询去发送请求,直到服务端能够接受然后去执行。但是在执行过程中客户端依旧是阻塞的。并且循环请求消耗很多的资源。
  3. (也是同步)多路复用:客户端在服务端未准备好执行事件的时候先阻塞,当服务端准备好后,才去发送请求。无事件阻塞,有事件执行。客户端在服务端准备期间和执行期间都是堵塞的。
  4. 同步:线程自己去获取结果(一个线程)
  5. 异步:线程自己不去获取结果,而是由其他线程送结果(至少两个线程)
  6. 异步非阻塞:客户端发送请求,通知服务端完成事件后,再通过回调方法来返回结果。

零拷贝优化(并非真正的0拷贝)

  1. 所谓的零拷贝是指用户态和内核态之间不存在拷贝。存在用户态到内核态的切换,但是拷贝都是发生在内核态。
  2. 问题:JAVA的IO实际不是物理设备级别的读写,而是缓存的复制,底层还是调用操作系统的读写方法,所以JAVA的每次读写都需要进行用户态到内核态,再从内核态到用户态的切换以及缓冲区的拷贝。
  3. 优化1:可以通过DirectByteBuffer进行优化。将堆外内存映射到JVM内存中来直接访问使用。减少一次数据的拷贝。但是用户态和内核态的切换次数没有减少。
  4. 优化2:通过channel调用transferTo/transferFrom方式拷贝数据。底层调用sendFile方法,
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/160757
推荐阅读
相关标签
  

闽ICP备14008679号