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

I/O多路复用简记

IO多路复用(服务器如何处理多个socket的同时数据传输):1、select。2、poll。3、epoll。

  • select使用bitmap存socket文件描述符,由bitmap槽位的每一位为0或1决定对应序的socket连接是否有数据到来。由单线程(多线程处理每一个socket但上下文切换消耗太大)不断循环里(全量拷贝到内核,由内核判断)判断bitmap以处理多路IO。select没数据会阻塞,有数据时fd对应bitmap槽置位并返回。在遍历bitmap判断被被置位槽执行对应IO。

    • select缺点:
    1. bitmap默认1024,大小可调但有限
    2. bitmap不可重用,每次需重新创建
    3. 用户态到内核态拷贝开销较大
    4. select返回后,要O(n)时间再次遍历
  • poll使用动态链表实现动态结构体数组存socket文件描述符解决select第一个缺点。pollfd每次置第i个对应结构体的revents字段可重用解决select的第二个缺点。至于第三四个缺点,二者无本质区别,都使用线性结构存储。仅支持水平触发。

  • epoll使用红黑树管理被监控的socket文件描述符,红黑树是一种自平衡的二叉查找树,在 epoll 中用于快速查找和管理大量的文件描述符。双向链表则用于存储就绪的文件描述符。数据结构用户态与内核态共享解决select的第三个缺点,使用事件驱动,只复制发生变化的socket(通过重排把有数据的socket添加到双向链表中,应用程序可以通过遍历链表来获取就绪的文件描述符)解决了select的第四个缺点。支持边缘触发(效率更高)和水平触发。当一个文件描述符上的状态发生变化时,边缘触发模式只会通知一次。当一个文件描述符上的状态发生变化时,水平触发模式会持续通知。边缘触发模式对于非阻塞 I/O 的支持更好,因为它可以确保应用程序在每个事件上都能够进行进一步的非阻塞操作。

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

相关文章:

  • SPECCPU2017操作说明
  • openresty (nginx)快速开始
  • 相机图像质量研究(11)常见问题总结:光学结构对成像的影响--像差
  • 【深度学习】基于多层感知机的手写数字识别
  • 给定n,m(200),构造一个n*m的矩阵a,使得每个4*4的子矩阵,左上角2*2的子矩阵的异或和等于右下角的,左下角的异或和等于右上角的
  • 【开源】基于JAVA+Vue+SpringBoot的假日旅社管理系统
  • kafka 文件存储机制
  • 引入BertTokenizer出现OSError: Can‘t load tokenizer for ‘bert-base-uncased‘.
  • 陶陶摘苹果C++
  • STM32F1 引脚重映射功能
  • c语言的各类输出函数(带完善更新)
  • 【linux温故】CFS调度
  • 计算机网络之一
  • 从一到无穷大 #23 《流计算系统图解》书评
  • 华为问界M9:领跑未来智能交通的自动驾驶黑科技
  • Java图形化界面编程——弹球游戏 笔记
  • 浅谈人工智能之深度学习~
  • 【复现】大华 DSS SQL 注入漏洞_46
  • Python 中的断点类型详解
  • 一步步建立一个C#项目(连续读取S7-1200PLC数据)
  • Hive窗口函数详解
  • 车载电子电器架构 —— 电子电气系统功能开发
  • LeetCode--代码详解 7.整数反转
  • 《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)
  • 创新S3存储桶检索:Langchain社区S3加载器搭载OpenAI API
  • 【Linux技术宝典】Linux入门:揭开Linux的神秘面纱
  • C语言---------对操作符的进一步认识
  • HarmonyOS 鸿蒙 ArkTS ArkUI 页面之间切换转换动画设置
  • 《CSS 简易速速上手小册》第8章:CSS 性能优化和可访问性(2024 最新版)
  • Peter算法小课堂—背包问题