一、基本知识(BIO、NIO、AIO)

2019-11-05  本文已影响0人  一直想上树的猪

一、什么是Netty?

Netty提供了易于使用的API的客户端/服务器框架
特点:

二、阻塞与非阻塞

线程访问资源的时候,该资源是否准备就绪的一种处理方式。如果资源此时没有准备就绪,这个时候就有两种处理方式:阻塞和非阻塞。阻塞指这个线程会一直持续等待这个资源处理完毕,直到它响应返回一个结果,这个时候线程不可以去做任何事情。非阻塞是指这个线程会直接返回结果可以去做其他的事情。

三、同步和异步

同步和异步是指访问数据的一种机制。
同步是指线程主动请求并且等待IO处理完成之后给一个通知
异步是指线程主动请求数据之后可以继续去处理其他的任务,可以发起其他的请求。当请求处理完成之后通过某种特定的通知方式去通知线程。

四、BIO

同步阻塞,Block IO
IO在进行读写的时候,这个线程是会被阻塞的,这个线程无法去进行其他的操作。使用起来非常方便,但是对于并发处理的能力非常低,并且线程之间访问资源的耗时也是比较久的。会比较依赖于网速和带宽。在JDK1.4之前都是这样子的。


五、NIO

同步非阻塞,New IO(Non-Block IO)


NIO是JDK1.4之后出现的。NIO有几个相关概念,如下:


相关概念

六、异步阻塞IO

实际开发中用不到。
上厕所,坑满了,我比较懒,我就干等着,然后有一个坑满了之后我也不会主动去蹲,而是等着释放坑的那个人通知我让我去用,这种方式是比较傻的。

七、AIO

异步非阻塞IO
上厕所,坑满了,我没有在厕所里面干等着,我是在厕所外面干着其他的事情,厕所的坑位用户用完了出来会通知我让我进去蹲坑,这个时候才去蹲坑。
非阻塞异步的通信方式,在NIO原有的基础上引入了一个异步的概念,在读写的时候它的所有的返回类型都是一个future对象, 它有相应的事件监听。

八、BIO、NIO、AIO对比

BIO、NIO、AIO对比

九、再看Netty

Dubbo底层是用的Netty,大型项目很多都是用的Netty。

Netty线程模型(Reactor)

首先我们来看看单线程模型:所有的IO操作都是由同一个NIO线程处理的。

单线程模型
在一些复杂场景(高负载、高兵发)中使用该线程不太合适,主要是因为单线程去处理成百上千的请求的时候它的性能会支撑不了。
多线程模型:由一组NIO线程处理IO操作
多线程模型
左边的单线程用于处理客户端链接,然后将请求丢给后面的Reactor线程池,这样以来就相当于有一个专门的线程去监听我们的客户端应用。对于一些额外的读写请求都会交给线程池去完成。
主从线程模型:一组线程池接受请求,一组线程池处理IO
主从线程模型
上一篇下一篇

猜你喜欢

热点阅读