Netty学习笔记(1)NIO三大组件
2024-09-03 18:44:31
1. Channel
channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层
常见的 Channel 有
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
2. Buffer
buffer 用来缓冲读写数据,常见的 buffer 有
- ByteBuffer
- MappedByteBuffer
- DirectByteBuffer
- HeapByteBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
- CharBuffer
3. Selector
3.1 服务器的设计演化
多线程版设计
缺点
- 内存占用高
- 线程上下文切换成本高
- 只适合连接数少的场景
线程池版
缺点:
- 阻塞模式下,线程仅能处理一个 socket 连接
- 仅适合短连接场景
selector 版设计
selector 的作用就是配合一个线程来管理多个 channel,获取这些 channel 上发生的事件,这些 channel 工作在非阻塞模式下,不会让线程吊死在一个 channel 上。适合连接数特别多,但流量低的场景(low traffic)
调用 selector 的 select() 会阻塞直到 channel 发生了读写就绪事件,这些事件发生,select 方法就会返回这些事件交给 thread 来处理
最新文章
- SignalR系列续集[系列6:使用自己的连接ID]
- linux内核(kernel)版本号的意义
- 初探asp.net异步编程之await
- Unity Standard Assets 简介之 CrossPlatformInput
- 给li设置float浮动属性之后,无法撑开外层ul的问题。(原址:http://www.cnblogs.com/cielzhao/p/5781462.html)
- WebService 的一些基本概念
- Resilio(BtSync)搭建
- Java-输入输出
- __KERNEL__ macro
- Mybatis+SpringMVC的项目环境搭建
- Web- 一些标签样式
- VMVare虚拟机的异常处理---内部错误
- js简单固定table表头及css问题分析。
- Ajax获取Response头信息
- git 命令笔记
- 实现upnp ssdp来查找局域网内的其他节点
- AngularJS中处理多个promise
- Matlab 瑞利信道仿真
- CUDNN安装
- Go1.5正式版程序性能分析小积累,实验环境windows64