什么是netty
(1)netty事实上是一个提供了易于使用的api c/s框架
(2)并发高-nio(非阻塞)
(3)传输快-零拷贝
了解BIO (同步阻塞)
bio:一个客户端对应一个线程,传输速度极慢,因为一个线程只处理一个连接(下面通过画图的形式让大家简单的去了解)
什么是同步非阻塞的NIO,New IO (Non-block IO)
nio:同步非阻塞的io,我们这里就就不套用了官方的套话,简单点。所谓nio就是在io进行数据交互的时候,处理的方式是多个client对应一个server,当然了这个server里面还有其他的----像是select和channel这个select就是充当于一个线程池的样子,然后select里面又有多个channel,每个channel就是处理一个线程,但是selector还是一个单线程的产物。话不多说,以图为鉴:
了解AIO
异步非阻塞IO
异步阻塞IO
接下来我就以我们生活中的实例进行详细的说明:
BIO::去上厕所,坑全满,此时我哦一直光等着,主动的去观察哪个坑位好了,只要有坑位释放了,我就立马去占坑
NIO:厕所的坑全部满了,此时我跑出去去抽烟或者是做别的事,然后时不时的再主动的去厕所有没有坑被释放,如果有坑我就自己去占
异步阻塞IO:我在厕所里,等有人好了以后来通知我,然后我再去占坑
AIO:我在厕所外抽烟玩手机,等有人好了来通知我去占坑
IO和NIO的区别
一.IO是面向流的,NIO是面向缓冲区的。
二.IO的各种流是阻塞的,NIO是非阻塞模式。
三.Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道
再来看netty
为什么会出现netty呢?或者说是netty的优点是在哪里呢?
netty是一个基于nio的框架,可以快速简单的开发网络的应用程序,简化了网络编程的相关规范,在使用netty之前我们使用nio会用一些问题,首先nio使用起来是比较复杂的,此外具备java多线程的的知识才能使用,此外网络阻塞或者网络断连的情况下是比较棘手处理的,而且nio内置的代码还是有点bug,这里使用netty的api使用起来非常的简单方便。几段代码就能解决很多的问题。内置具备多个编解码的功能,此外还可以定制childehandler,对比其他同类型的nio框架来说,这个Netty是最好的,最稳定的,netty针对了nio中存在的bug也进行了消除,目前来讲,netty不仅经过了很多次的优化,而且经过了多个商业项目的考验,这里说得话,就看spring double的框架使用,底层就是用的netty,double经过了考验,那么netty也就相当于经过了考验