首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
用户5488193880519
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
0
文章 0
沸点 0
赞
0
返回
|
搜索文章
最新
热门
5.3 零拷贝
传统的 IO 将一个文件通过 socket 写出 File f = new File("helloword/data.txt"); RandomAccessFile file = new Random
5. NIO vs BIO
5.1 stream vs channel stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层) stream 仅支持阻塞 API,channel 同时支
4.7 UDP
UDP 是无连接的,client 发送数据不会管 server 是否开启 server 这边的 receive 方法会将接收到的数据存入 byte buffer,但如果数据报文超过 buffer 大小
利用多线程优化
前面的代码只有一个选择器,没有充分利用多核 cpu,如何改进呢? 分两组选择器 单线程配一个选择器,专门处理 accept 事件 创建 cpu 核心数的线程,每个线程配一个选择器,轮流处理 read
ByteBuffer 大小分配
每个 channel 都需要记录可能被切分的消息,因为 ByteBuffer 不能被多个 channel 共同使用,因此需要为每个 channel 维护一个独立的 ByteBuffer ByteBuf
💡 为何要 iter.remove()
因为 select 在事件发生后,就会将相关的 key 放入 selectedKeys 集合,但不会在处理完后从 selectedKeys 集合中移除,需要我们自己编码删除。例如 第一次触发了 ssc
4.4 处理 read 事件
@Slf4j public class ChannelDemo6 { public static void main(String[] args) { try (ServerSocketChannel
4.3 处理 accept 事件
public class Client { public static void main(String[] args) { try (Socket socket = new Socket("loca
4.2 Selector
创建 Selector selector = Selector.open(); 绑定 Channel 事件 也称之为注册事件,绑定的事件 selector 才会关心 channel.configure
多路复用
单线程可以配合 Selector 完成对多个 Channel 可读写事件的监控,这称之为多路复用 多路复用仅针对网络 IO、普通文件 IO 没法利用多路复用 如果不用 Selector 的非阻塞模式,
下一页
个人成就
文章被阅读
960
掘力值
25
关注了
0
关注者
0
收藏集
0
关注标签
0
加入于
2023-09-25