Netty - NIO基础

 

回到顶部(go to top)

一、NIO的三大组件

1.1 Channel

 

常见的Channel有:

  • FileChannel -- 文件传输通道
  • DatagramChannel -- UDP数据传输通道
  • SocketChannel -- TCP数据传输通道(客户端,服务器端通用)
  • ServerSocketChannel -- TCP数据传输通道(专用于服务器端)

1.2 Buffer

常见的Buffer:

只有ByteBuffer最常用,是一个抽象类。实现类有三个,如下图所示

 

 

1.3 Selector

服务器设计 - 多线程

形象解释:将服务器想象是个饭店,socket是一个客人,thread是一个服务员。每来一个客人,就要安排一个服务员跟着。

 

内存占用高:每维护一个线程,都要消耗内存

线程上下文切换成本高:CPU如果只有16核,那最多只能有16个线程在跑。其余线程就搞挂起,保存下该线程的运行情况。等CPU时间片轮到它,再load上下文回去。

 

服务器设计 - 线程池

形象解释:将服务器想象是个饭店,socket是一个客人,thread是一个服务员。在阻塞模式下,一个客人来了,哪怕这个客人啥都不干,一个服务员就要干等在那里,不能处理其他客人的请求。。。

 

老式服务器大多此设计,处理HTTP 请求

服务器设计 - selector

形象解释:将服务器想象是个饭店,channel是一个客人,thread是一个服务员。selector可以监视多个客人的动作。一旦哪个客人有动作(要和服务器交互),selector就会感知到,通知服务员thread来处理。

豁然开朗,之前以为非阻塞的实现是因为selector,现在才知道selector的为了让非阻塞变成更好:

  • 无事件时,阻塞
  • 有事件时,非阻塞

 

 

   

 

posted on   frank_cui  阅读(30)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

levels of contents
点击右上角即可分享
微信分享提示