当前位置: 首页 > news >正文

libhv之hio_t分析

上一篇文章解析了fd是怎么与io模型关联。其中最主要的角色扮演者:hio_t

1. hio_thloop的关系

fd的值即hio_t所在loop ios变量中所在的index值。
hio_t = ios[fd]

struct hloop_s {
...// ios: with fd as array.index//io_array保存了和hloop关联的所有hio_t,并且fd的值即hio_t在io_array中的下标//hio_t = ios[fd]struct io_array             ios;
}
2.hio_thloop绑定

通过hio_gethloop进行绑定

hio_t* hio_get(hloop_t* loop, int fd) {//如果fd的值大于ios的最大值则重新分配大小if (fd >= loop->ios.maxsize) {int newsize = ceil2e(fd);io_array_resize(&loop->ios, newsize > fd ? newsize : 2*fd);}//如果当前hio_t不存在则重新分配并且初始化hio_t* io = loop->ios.ptr[fd];if (io == NULL) {HV_ALLOC_SIZEOF(io);hio_init(io);io->event_type = HEVENT_TYPE_IO;io->loop = loop;io->fd = fd;loop->ios.ptr[fd] = io;}//标记hio_t状态已经ready,hio_ready即初始化数据if (!io->ready) {hio_ready(io);}return io;
}hio_t* hread(hloop_t* loop, int fd, void* buf, size_t len, hread_cb read_cb) {hio_t* io = hio_get(loop, fd);
...
}hio_t* hwrite(hloop_t* loop, int fd, const void* buf, size_t len, hwrite_cb write_cb) {hio_t* io = hio_get(loop, fd);
...
}
3.hio_tio模型绑定与解除

hio_add与io模型绑定iowatcher_add_event
hio_del与io模型解除绑定iowatcher_del_event

疑问解答

  1. 同一个loop的所有hio_t的readbuf均指向loop本身的readbuf,不会发生数据覆盖么?

答:不会,因为loop工作的前提是单线程模式,所以不存在多个io同时读的问题。

http://www.lryc.cn/news/106336.html

相关文章:

  • C语言的转义字符
  • 【腾讯云 Cloud Studio 实战训练营】CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!
  • Pandas时序数据分析实践—时序数据集
  • use strict 是什么意思?使用它区别是什么?
  • 常见OOM异常分析排查
  • kubernetes网络之网络策略-Network Policies
  • 交换机VLAN技术和实验(eNSP)
  • 8.Winform界面打包成DLL提供给其他的项目使用
  • 海量数据存储组件Hbase
  • (一)基于Spring Reactor框架响应式异步编程|道法术器
  • Vue3 让localstorage变响应式
  • 【深度学习】InST,Inversion-Based Style Transfer with Diffusion Models,论文,风格迁移,实战
  • 【CSS】3D卡片效果
  • OrderApplication
  • 如何在保健品行业运用IPD?
  • Flink系列之:动态发现新增分区
  • eclipse版本与jdk版本对应关系
  • File类的学习
  • Linux 操作系统 Red Hat Enterprise Linux 安装教程
  • 关于拓扑排序
  • 【C++】开源:Boost库常用组件配置使用
  • 用python通过http实现文件传输,分为发送端和接收端
  • 数据结构--图的遍历 DFS
  • SpringBoot集成MyBatisPlus+MySQL(超详细)
  • 一边是计算机就业哀鸿遍野,一边是高考生疯狂涌向计算机专业
  • 解决外部主机无法访问Docker容器的方法
  • IDEA中修改类头的文档注释信息
  • 建模教程:如何利用3ds Max 和 After Effects 实现多通道渲染和后期合成
  • JPA之Hibernate
  • leetcode(力扣)剑指 Offer 16. 数值的整数次方 (快速幂)