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

Linux网络编程day6 下午去健身

epoll优缺点

显著提高程序在大量并发连接中只有少量活跃的情况下系统cpu利用率。

epoll事件模型

ET模式

边沿触发 

缓冲区剩余未读尽的数据不会导致epoll_wait返回。必须有新一次的事件满足才会触发。

struct epoll_event ep;
ep.events = EPOLLIN | EPOLLET

修改cfd为非阻塞读 

flag = fcntl(cfd , F_GETFL);
flag |= O_NONBLOCK;
fcntl(cfd , F_SETFL , flag)

 结论:epoll的ET模式是一个高效模式,但是只支持非阻塞模式忙轮询。所以需要下面操作。之后使用的都是这种模式的。 

struct epoll_event ep;
ep.events = EPOLLIN | EPOLLET;
ep.data.fd = cfd;int flag = fcntl(cfd , F_GETFL);
flag |= O_NONBLOCK;
fcntl(cfd , F_SETFL , flag);

LT模式

水平触发--->默认采用模式

缓冲区剩余未读尽的数据会导致epoll_wait返回。

epoll的优缺点

优点:高效。突破1024文件描述符。

缺点:不能跨平台,只支持Linux。

epoll反应堆模型

epoll ET模式+非阻塞、轮询+void* ptr。不但要监听cfd的读事件,还要监听cfd的写事件。

原始:socket---bind---listen---while(1)---epoll_create创建红黑树---返回epfd---epoll_ctl()向树上添加一个监听fd---while(1)---epoll_wait监听---对应监听fd有事件产生---返回监听数组---lfd满足---accept---cfd满足---read---小->大---wirte回去

反应堆:socket---bind---listen---while(1)---epoll_create创建红黑树---返回epfd---epoll_ctl()向树上添加一个监听fd---while(1)---epoll_wait()监听---对应监听fd有事件产生---返回监听数组---lfd满足---accept---cfd满足---read()---小->大---cfd从监听红黑树上摘下---epoll_ctl监听cfd写事件---EPOLLOUT --回调函数---epoll_ctl(EPOLL_CTL_ADD)重新放到红黑树上监听写事件--等待epoll_wait返回---说明cfd可写---wirte回去---cfd从监听红黑树上摘下---epoll_ctl监听cfd读事件---epoll_ctl(EPOLL_CTL_ADD)重新放到红黑树上监听读事件---epoll_wait监听

网络编程中 read() -- recv()   write() -- send(); 

eventset函数():
设置回调函数。lfd-->acceptconn()cfd-->recvdata()cfd-->senddata()eventadd函数():
将一个fd,添加到监听红黑树。设置监听read事件,还是监听写事件。

生成tags文件

ctags ./* -R
可以用ctrl+]跳转到函数定义
ctrl+t返回到此前跳转位置
ctrl+o在屏幕左边列出文件列表 再次按消失
ctrl+F4右边列出函数列表

http://www.xdnf.cn/news/4557.html

相关文章:

  • MATLAB导出和导入Excel文件表格数据并处理
  • 大模型范式转移:解码深度学习新纪元
  • 【Day 21】HarmonyOS实战:从智慧医疗到工业物联网
  • 【FreeRTOS-消息队列】
  • PyQt5 实现自定义滑块,效果还不错
  • grpc到底是啥! ! !!
  • shell操作文件上传
  • 第3章 模拟法
  • SDC命令详解:使用get_ports命令进行查询
  • 浅谈广告投放从业者底层思维逻辑
  • C语言 指针(8)
  • 第七章 模板制作工具
  • ubuntu 挂载硬盘
  • 当“信任”遇上“安全”:如何用Curtain Logtrace记录文件操作活动 守护团队与数据的双重底线?
  • 2398.预算内的最多机器人数目 滑动窗口+单调队列
  • springboot集成langchain4j记忆对话
  • 通道注意力-senet
  • HDMI布局布线
  • Loly: 1靶场渗透
  • 大模型 Function Calling 学习路线图
  • Solana批量转账教程:提高代币持有地址和生态用户空投代币
  • 缓存菜品-04.功能测试
  • C++ 静态成员
  • 大模型系列(四)--- GPT2: Language Models are Unsupervised Multitask Learners​
  • Java 多线程编程:从基础到实战!
  • Ceph集群OSD运维手册:基础操作与节点扩缩容实战
  • MSTP 实验拓扑配置(ENSP)
  • 自动化创业机器人:现状、挑战与Y Combinator的启示
  • hadoop中的序列化和反序列化(3)
  • React学习路线-Deepseek版