netty与Nio
文章平均质量分 51
北堂飘霜
如果不去争取,你想要的东西永远都不是你的!
展开
-
netty之http案例
直接上代码原创 2022-07-11 15:44:42 · 220 阅读 · 0 评论 -
Netty异步模型
1、异步和同步的区别是:当一个异步过程开始时,调用者是不能立刻得到结果的。是调用完成之后通过回调来通知调用者的。2、Netty的IO操作是异步的,会返回一个ChannelFuture。3、调用者虽然不能直接获得结果,但是可以通过Future-Listener机制监听,让调用者获得结果。4、Netty模型是建立在FUTURE - CALLABLE机制的。表示异步的执行结果,可以通过它提供的方法来检测方法是否执行完成。ChanneFuture是一个接口,可以添加适当的监视器,当监听的事件发生的时候,就会通知到监原创 2022-07-11 14:18:55 · 286 阅读 · 0 评论 -
Netty Task
1、用户自定义的普通任务2、用户自定义定时任务3、非当前Reactor调用Channel的各种方法用户自定义的普通任务用户自定义定时任务方案详细说明1、Netty中抽象出两组线程组,BossGroup负责连接,而WorkGroup负责网络的读写2、NioEventLoop是一个不断循环的执行任务的线程,每一个NioEventLoop都有一个solector,用于监听绑定在其上的socket网络通道3、NioEventLoop采用串行化设计,从消息的接受到解码到编码再到发送,都是由IO线程Nio原创 2022-07-11 13:44:03 · 154 阅读 · 0 评论 -
Netty线程模型
二话不说,直接上图(Channel少了一个a)BossGroup维护Selector,只关心Accept事件当接受到Accept事件时,获取到对应的SocketChannel,封装成NioSocketChannel并注册到worker线程,并进行维护当Worker发现有可以处理的事件,就开始处理。刚刚这张图过于简单,netty比较复杂,画一张比较复杂的图。Netty抽象出两组线程池,BossGroup专门负责连接,WorkerGroup专门负责网络的读写。BossGroup和WorkerGroup类原创 2022-06-25 21:44:07 · 204 阅读 · 0 评论 -
主从Reactor多线程
二话不说,直接上图主Reactor通过Selector监听连接事件,收到通知后。通过Acceptor处理连接事件当Acceptor处理连接事件之后,MainReactor将事件分配给SubReactorSubReactor将这个事件加入到队列中,并且创建Handler去处理Handler对事件分发到Worker线程池并且进行处理主Reactor可以对应多个子Reactor优点:可以应对高并发场景,主从各司其职缺点:编程难度比较大...原创 2022-06-25 17:41:02 · 182 阅读 · 0 评论 -
单Reactor多线程的分析
二话不说,直接上原理图Reactor通过Selector监听客户端,发生事件后通过Dispatcher分发。如果是建立连接的请求,则通过Acceptor建立连接,然后创建一个Handler去处理。如果不是建立连接,直接交给Handlder处理Handler不会直接处理,会去Worker线程池中调用线程处理。worker线程池会分配线程去处理,结果返回给HandlerHandler收到响应之后,将结果send回去优点:充分利用CPU确定:Reactor还是单线程,还是会出现性能瓶颈,而且数据都是共享的,容易原创 2022-06-25 16:46:03 · 141 阅读 · 0 评论 -
单Reactor单线程-Nio群聊系统
基于之前说的,做一个nio的群聊系统。代码如下:服务器端:客户端如下原理图实现通过一个阻塞对象监听所有请求Reactor通过Selector监听,然后通过Dispatcher进行分发如果建立请求连接事件,那么先用一个Acceptor连接,好了之后再用Handler进行处理如果并不是请求连接事件,Reactor会调用Handler去处理Handler的流程:read -> hander -> send 的过程优点:简单,一个线程之内全部搞定缺点:也是只有一个线程,无法充分的利用多核CPU,很容易到达原创 2022-06-25 16:26:55 · 116 阅读 · 0 评论 -
Netty-初入正题-Reactor介绍
不同的线程模型对性能的影响很大,我们必须要熟知各种线程模型。才能清楚的知道我们为什么要选择netty。1.传统io阻塞模型。2.Reactor 模型。根据Reactor模型的数量和处理资源的线程池数量的不同,有3中典型实现。1.单线程单Reactor。2.单线程夺Reactor。3.主从Reactor多线程。Netty是在主从Reactor多线程模型中做了改进。有多个Reactor工作原理图:当并发数很大时,就会创建大量的线程模型。占用很大的系统资源。任务创建连接后,如果当前线程没有数据可读,就原创 2022-06-24 22:58:28 · 148 阅读 · 0 评论 -
JAVA Nio编程 Selector
其实,在Nio中,有三位大哥,他们分别是 选择器,通道,缓冲区。这三位是重量级人物,前面我们已经讲了通道,缓冲区这两位大哥。现在说说选择器。JAVA NIO和JAVA BIO最大的区别就是BIO一个线程对应一个客户端,而NIO则可以对应多个。处理多个客户端的链接,就要用到大哥 Selector。这位大哥的牛逼之处在于可以同时管理多个通道,怎么管理的,通过事件。如果有事件发生,那么就会去处理相应事件。一个线程足以搞定多个通道。也就是管理多个连接和请求。只有在通道真正有事件发生的时候才去处理。多路复用,同时可以原创 2022-06-16 18:50:47 · 195 阅读 · 0 评论 -
JAVA Nio编程 Channel
其实通道和流还是有点相似的,但是又不完全像。1、流只能读或者写,通道可以同时实现读写。2、通道可以实现异步读写。3、通道可以写缓冲区,也可以读缓冲区。4、他们都有很多特定的子类(这个叫做工厂模式的应用)5、将“java yyds”写到我们的java.txt文件里面ok了,家人们。既然写了,那就再读一下。梅开二度,我现在读到了java.txt,我把它写到我们的java1.txt中。我先用缓冲区读取,再写进去。还可以拷贝文件,我现在拷贝一个java.txt其实读写还可以通过多Buffer完成原创 2022-06-13 23:18:04 · 109 阅读 · 0 评论 -
JAVA Nio编程 - Buffer
前面我们看到了Bio,不讲武德,浪费资源。Nio要好很多,人家知道节约粮食。1、从jdk 1.4开始,引入了Nio,Nio的N有人解释为New,也有人解释为 No - blocking,都对。它是一个同步非阻塞的。相对于Bio是一个新的io,也是一个非阻塞的io。2. 一般都在包,java.nio下。3. Nio的核心,通道,缓冲区,选择器。4. 它是面向缓冲区编程的。5. 为什么讲bio不讲武德,因为现在有50个请求过来了,bio是给50个线程去处理的。而nio可能1个线程搞定,当没有任务的时候原创 2022-06-13 22:27:09 · 104 阅读 · 0 评论 -
Java Bio编程
bio基本认识和不足,一文了解bio的大概原创 2022-06-13 21:42:43 · 384 阅读 · 0 评论