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

对于muduo我自己的理解

muduo 的灵魂是 Reactor 模式。

muduo本质就是IO多路复用+EventLoop事件循环+全部非阻塞

在IO多路复用中,使用epoll(和poll,select一样,用于监听多个文件描述符(通常是网络连接)是否准备好进行“读”或“写操作”,即事件是否就绪,让单个线程可以高效地管理大量连接,而不是为每个连接开一个线程),同时IO多路复用中也又检测新事物的连接,也是epoll来干(因为监听套接字也是一个文件描述符fd,当服务器启动时,会创建一个套接字(listen_fd),绑定到某个端口,并调用listen()开始监听,这个listen_fd会添加到epoll 的监控集合中,并告诉 epoll 我们关心的是这个 listen_fd 上的 可读事件,当有新的客户端连接尝试到达服务器端口时,操作系统内核的 TCP/IP 协议栈会完成 TCP 三次握手。一旦握手完成,一个新的连接就建立了。 此时,内核会将这个 listen_fd 标记为 “可读”(EPOLLIN 就绪)。注意:这里的“可读”对于监听套接字的特殊含义是 “有新连接到达,可以调用 accept() 了”epoll_wait() 函数在检测到这              个 listen_fd 的 EPOLLIN 事件就绪时,就会返回。

  • 服务器程序(具体是 EventLoop -> Poller -> Channel)发现 listen_fd 的 EPOLLIN 事件就绪,就会调用预先注册给这个 Channel 的 “可读回调函数”在这个回调函数里(通常是 Acceptor::handleRead()),程序才会调用 accept() 系统调用。 accept() 会从内核的已连接队列中取出这个新连接,创建一个新的套接字描述符(conn_fd 用于和这个特定的客户端通信。这个新创建的 conn_fd 会立即被设置为非阻塞模式,并再次添加到 epoll 的监控集合中(同样关心 EPOLLIN 等事件),后续这个连接的读写事件就由 epoll 来监控了。

)

在EventLoop事件循环就是调用epoll_wait,在IO多路复用那里阻塞着。然后还有epoll_wait有个参数timeout,可以设置隔一段时间返回IO多路复用里就绪的事件。

epoll 是 Linux 提供的一种 IO多路复用机制。它本身是一组 系统调用 (epoll_createepoll_ctlepoll_wait) 和一个内核数据结构(事件表)。

epoll_wait 是干什么的? 它是 epoll 机制的核心系统调用之一。它的工作就是 阻塞(或等待)在事件表上,直到有注册的事件发生或者超时

http://www.dtcms.com/a/278073.html

相关文章:

  • UniHttp生命周期钩子与公共参数实战:打造智能天气接口客户端
  • flask校园学科竞赛管理系统-计算机毕业设计源码12876
  • SPSSPRO:数据分析市场SaaS挑战者的战略分析
  • JAVA并发——什么是AQS?
  • Mapbox GL初探
  • 【unitrix】 5.0 第二套类型级二进制数基本结构体(types2.rs)
  • 16.使用ResNet网络进行Fashion-Mnist分类
  • css如何同时给元素设置背景和背景图?
  • 每日算法刷题Day47:7.13:leetcode 复习完滑动窗口一章,用时2h30min
  • 说实话,统计分析用Python这5个第三方库就够了
  • AutoLabor-ROS-Python 学习记录——第一章 ROS概述与环境搭建
  • PortsSwiggerLab: SSRF with blacklist-based input filter
  • JS进阶-day1 作用域解构箭头函数
  • Spring AI 项目实战(十六):Spring Boot + AI + 通义万相图像生成工具全栈项目实战(附完整源码)
  • NO.5数据结构串和KMP算法|字符串匹配|主串与模式串|KMP|失配分析|next表
  • pthread_mutex_unlock函数的概念和用法
  • 大规模电商系统分库分表实战经验分享
  • NFSV4锁机制(三)
  • 编程技术杂谈2.0
  • DVWA靶场通关笔记-XSS DOM(High级别)
  • 垃圾收集器-Serial Old
  • CVE-2022-0609
  • vue2入门(1)vue核心语法详解复习笔记
  • 【开源项目】网络诊断告别命令行!NetSonar:开源多协议网络诊断利器
  • 1.1.1+1.1.3 操作系统的概念、功能
  • c++无锁队列moodycamel::ConcurrentQueue测试结果
  • 在高并发场景下,仅依赖数据库机制(如行锁、版本控制)无法完全避免数据异常的问题
  • Sping AI Alibaba
  • 第11章 AB实验评估指标体系
  • Soul方程式:Z世代背景下兴趣社交平台的商业模式解析