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

Linux下多任务编程(网络编程2)

前言

        本文介绍解决accpet和recv相互阻塞的问题,可以用多线程并发外也可以用epoll I/O多路复用的方式解决。

epoll I/O多路复用

I/O多路复用原理

        因为accept和recv相互阻塞,并且无法确定那个函数先执行,所以代码无法直接写

        accept阻塞是sockfd带来饿,recv阻塞是newfd带来的

        核心思想:所以需要一个工具,将sockfd和newfd统一监管,哪个fd发生了事件(连接事件和收数据事件),就把哪个fd通知给用户,用户程序再调用对应的处理函数去处理。

        多路IO复用的方法:select、poll、epoll

select poll epoll的区别(重点)

        select和poll是轮询模式(顺序查找,全过一遍)
        epoll是事件(告诉谁需要先处理,哈希查找)

selectpollepoll
监控机制线性表遍历方式同select,解决了select文件描述符数量的限制基于事假
性能当文件描述符数量增加时,性能线性下降同select,但没有文件描述符数量的限制性能不随监控的文件描述符数量增加而显著下降,适合大规模文件描述符的监控
最大文件描述符数量有限制,通常为1024无硬性限制,但大量文件描述符会导致性能下降无硬性限制,理论上受内存大小限制
可移植性跨平台,广泛支持跨平台,广泛支持主要在Linux系统中支持,其它系统的支持不高

epoll工作原理

epoll相关函数

epoll_create函数

#include <sys/epoll.h>
int epoll_create(int size);
//例子
int epfd = epoll_create(10);

        功能:创建epoll

        参数:大于0即可,epoll能存储的fd个数是动态增加的
        返回值:≥0 代表epoll的文件描述符,<0 创建失败 

epoll_ctl函数

#include <sys/epoll.h>
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

        功能:向epoll中添加/删除一个fd

        参数1:epoll_create的返回值
        参数2:EPOLL_CTL_ADD        添加
                     EPOLL_CTL_DEL        删除
        参数3:待添加的文件描述符fd
        参数4:待添加fd的相关属性

epoll_wait函数

UDP广播

UDP组播


http://www.kler.cn/a/349694.html

相关文章:

  • Linux《基础指令》
  • 阿里巴巴Qwen团队发布AI模型,可操控PC和手机
  • 解锁豆瓣高清海报:深度爬虫与requests进阶之路
  • 使用 postman 测试思源笔记接口
  • 设计模式的艺术-策略模式
  • 27.useFetch
  • 【C++刷题】力扣-#108-将有序数组转换为二叉搜索树
  • Unity发送Http
  • 使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期
  • 案例分享—国外优秀UI卡片设计作品赏析
  • Acrel-1200——分布式光伏运维云平台
  • bat(批处理脚本学习)
  • markdown 笔记,语法,技巧
  • k8s中pod管理
  • 判断 HTTP/2 多路复用是否在服务器上实现
  • 本地windows文件上传到远程阿里云windows server方法
  • 自监督行为识别-时空线索解耦(论文复现)
  • 【FPGA开发】Xilinx锁相环IP核仿真输出初始有一段高电平引发的思考与探究
  • 桂林旅游一点通:SpringBoot平台应用
  • MySQL 密码忘记了怎么办?
  • Spring Boot在医疗病历B2B交互系统中的应用前景
  • AWS账号与邮箱的关系解析
  • 【记录】Django数据库的基础操作
  • 【计算机网络 - 基础问题】每日 3 题(三十六)
  • OPC UA与PostgreSQL如何实现无缝连接?
  • 使用Yolov10和Ollama增强OCR