netty
https://blog.csdn.net/jingzi123456789/article/details/106849734
netty概述
netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端,极大简化了tcp和udp套接字服务器等网络编程,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性、高可定制性
bio:单个线程阻塞完成
每个请求都需要独立的线程完成数据 Read,业务处理,数据 Write 的完整操作问题。
当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大。
连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在 Read 操作上,造成线程资源浪费。
nio :channel,buffer,selector(多路复用)
selector的作用:
- Java NIO 用非阻塞的IO方式,可以用一个线程,处理多个客户端连接,就会用到selector
- Selector能够检测多个注册的通道上是否有事件发生,如果有事件发生,便获取事件然后针对每个事件进行对应的处理,这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求
- 只有在连接真正有读写事件发生时,才会进行读写,就大大地减少了系统开销,并且不必为每个连接都去创建一个线程,不用去维护多个线程
- 避免了多线程之间的上下文切换导致的开销
selector注册了很多个channel通道,selector监听通道,有一个通道好了后就可以执行connect(连接就绪)、accept(接受就绪),read(读就绪),write(写就绪);
netty启动,监听20880端口,所有给这个端口发送数据的,netty服务器能收到,初始化通道,注册到selector中,监听accept事件,处理通道中的信息,netty与客户端建立连接,读会给一个任务,写给一个任务,写就是返回给客户端
boss线程组:用来监听主线程,来自20880的准备就绪
worker线程组:工作线程
浙公网安备 33010602011771号