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

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右边列出函数列表

相关文章:

  • JAVA中常见队列详解-非线程安全
  • MCP系列(一)什么是MCP?
  • DMA技术原理
  • 软件系统的可观测性 Observability
  • 鸿蒙开发中对want的深入理解,want和uiability的关系-深度理解want的意思有利开发-优雅草卓伊凡
  • 聊一聊Qwen3思考模式实现以及背后原理探讨
  • 【Ollama】docker离线部署Ollama+deepseek
  • 深度学习赋能:正面吊车载箱号识别系统的核心技术
  • vue+vite难点和优化,及seo优化
  • 亚远景-ASPICE vs ISO 21434:汽车软件开发标准的深度对比
  • 可视化图解算法34:二叉搜索树的最近公共祖先
  • Docker 容器化部署深度研究与发展趋势
  • mysql中执行select命令的顺序
  • upload-labs靶场通关详解:第一关
  • 基于OpenTelemetry的分布式链路追踪Trace‌实现(PHP篇)
  • FlyEnv:优雅直观的跨平台开发环境管理工具
  • vue3+vite项目引入tailwindcss
  • Spark处理过程-转换算子和行动算子
  • 通过vllm部署qwen3大模型以及基于 vLLM 的 OpenAI 兼容 API 接口调用方法总结
  • 详细剖析传输层协议(TCP和UDP)
  • 首映丨纪录电影《滚烫年华》:献给所有奋斗者
  • 王毅同巴基斯坦副总理兼外长达尔通电话
  • 暴利之下:宠物殡葬行业的冰与火之歌
  • 上海交大:关注到对教师邵某的网络举报,已成立专班开展调查
  • 秦洪看盘|重估叙事主题卷土重来,给A股注入新活力
  • 国家主席习近平同普京总统举行大范围会谈