java nio 异步_java nio 与 nio 的关系

本文探讨了同步异步和阻塞非阻塞的概念,强调它们更多是一种编程思维模式。在Linux IO模型中,即使是同步非阻塞也会在内核到用户态的数据复制过程中阻塞。对于Java的NIO,它提供了选择器等特性,实现了多路复用,虽然其内部机制并非真正的异步非阻塞,但相比传统的同步阻塞,效率更高。Netty作为异步非阻塞框架,其内部使用多路复用实现高效IO处理,但从整体上看,仍然可以视为异步非阻塞模型。
摘要由CSDN通过智能技术生成

首先我想说下我对 同步异步 阻塞非阻塞的理解:

同步异步 指的是线程在处理一件事的时候,能不能去处理另外一件事,然后过一会再给上一件事结果

阻塞非阻塞 指的是线程在处理一件事的时候,会不会被阻塞住 (linux 里的NIO 意思就是no block io)

这在java 等编程语言里 ,应该是一种编程模型,

而在linux 的IO模型里 ,这种表述就不成立 ,因为不管什么IO模型,在从内核复制到用户态的过程 中都是阻塞的,即使是 同步非阻塞模型,

在linux 模型中,阻塞非阻塞指的是 使用系统调用看用户态准备好没有这个过程 ,而对于linux多路复用,系统调用select也阻塞,也没有办法去做别的任务,看起来他应该是同步阻塞,但他却比linux的同步阻塞要好得多,

因为同步阻塞模型是对一个IO ,而多路复用是对多个IO,

关于linuxIO模型 : https://www.jianshu.com/p/486...

我之前也纠结过同步非阻塞和异步非阻塞的事情,但是后来想了想,这个东西要从不同的层面看,就拿netty来说,从整体来看,是属于异步非阻塞,accept的线程处理完请求,交给后面的reactor,

那accept的线程不就去处理别的请求了,这不就达到了异步非阻塞,但他内部reactor 使用的是多路复用模型 而不是 真正的 异步非阻塞模型,

所以说了这么多,其实还是想表达 同步异步,阻塞非阻塞 ,只是一种编程思路,不用去纠结,也不要被linux的IO模型搞混了,

还有就是java的NIO 是 new IO 的意思,不是noblock io ,因为他除了提供selector之外,还有其他的io特性提供,比如大文件的处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值