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

TCP并发模型 || select || poll || epoll

TCP并发模型:
1.TCP多线程模型:
    缺点:
        1.创建线程会带来资源开销,能够实现的并发量比较有限 

2.IO模型:
    1.阻塞IO:
        没有数据到来时,可以让任务挂起,节省CPU资源开销,提高系统效率
    
    2.非阻塞IO:
        程序未接收到数据时一直执行,效率很低

    3.异步IO
        只能绑定一个文件描述符用来读取数据

    4.多路复用IO
        select         //监听集合
            1.select监听的集合中的文件描述符有上限限制
            2.select有内核层向用户层数据空间拷贝的过程,占用系统资源开销
            3.select必须轮询检测产生事件的文件描述符
            4.select只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)

        poll         //监听数组
            1.poll有内核层向用户层数据空间拷贝的过程,占用系统资源开销
            2.poll必须轮询检测产生事件的文件描述符
            3.poll只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)

        epoll         //监听内核空间中的一个事件表

        epoll_create

        epoll_ctl

        epoll_wait

函数接口:


    1.select 
      int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);
      功能:
        select监听文件描述符集合中是否有文件描述编程ready状态
      功能:
        nfds:最大文件描述符的值+1 
        readfds:读文件描述符集合
        writefds:写文件描述符集合
        exceptfds:其余文件描述符集合
        timeout:等待的时长
            NULL 一直等待
      返回值:
        成功返回文件描述符集合中的文件描述符个数
        失败返回-1 

    void FD_CLR(int fd, fd_set *set);
    功能:
        将文件描述符fd从集合中清除 

    int  FD_ISSET(int fd, fd_set *set);
    功能:
        判断文件描述符fd是否仍在集合中 

    void FD_SET(int fd, fd_set *set);
    功能:
        将文件描述符fd加入到集合中

    void FD_ZERO(fd_set *set);
    功能:
        将文件描述符集合清0 

    2.poll   
      int poll(struct pollfd *fds, nfds_t nfds, int timeout);
      功能:
        监听文件描述符集合是否有事件发生
      参数:
        fds:监听文件描述符集合数组空间首地址
        nfds:监听文件描述符集合元素个数
        timeout:等待的时间(-1 一直等待)
      返回值:
        成功返回产生事件的文件描述符个数
        失败返回-1 

    struct pollfd {
        int   fd;         /* file descriptor */
        short events;     /* requested events */
        short revents;    /* returned events */
    };

    fd:监听的文件描述符
    events:要监听的事件  POLLIN:是否可读  POLLOUT:是否可写
    revents:实际产生的事件 

    3.epoll 
      int epoll_create(int size);
      功能:
        创建一张内核事件表
      参数:
        size:事件的个数
      返回值:
        成功返回文件描述符
        失败返回-1 
    
      epoll_ctl 
      int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
      功能:
        维护epoll时间表
      参数:
        epfd:事件表的文件描述符
        op:
            EPOLL_CTL_ADD   添加事件
            EPOLL_CTL_MOD   修改事件
            EPOLL_CTL_DEL   删除事件
        fd:
            操作的文件描述符
        event:
            事件对应的事件 
        
        typedef union epoll_data {
            void        *ptr;
            int          fd;
            uint32_t     u32;
            uint64_t     u64;
        } epoll_data_t;

        struct epoll_event {
            uint32_t     events;      /* Epoll events */
            epoll_data_t data;        /* User data variable */
        };

      返回值:
        成功返回0 
        失败返回-1 

      epoll_wait 
      int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);
      功能:
        监听事件表中的事件
      参数:
        epfd:文件描述符
        events:存放实际产生事件的数组空间首地址
        maxevents:最多存放事件的个数
        timeout:设定监听的时间(超过该时间则不再监听)
        -1 一直监听直到有事件发生
      返回值:
        成功返回产生事件的文件描述符个数
        失败返回-1 
        如果时间达到仍没有事件发生返回0 


 

相关文章:

TCP并发模型 || select || poll || epoll

TCP并发模型: 1.TCP多线程模型: 缺点: 1.创建线程会带来资源开销,能够实现的并发量比较有限 2.IO模型: 1.阻塞IO: 没有数据到来时,可以让任务挂起,节省CPU资源开销,提高系统效率 2.非阻塞IO: 程序未接收到数据时一直执行,效率很低 3…...

【开源】SpringBoot框架开发房屋出售出租系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预定意向模块2.4 交易订单模块 三、系统展示四、核心代码4.1 查询房屋求租单4.2 查询卖家的房屋求购单4.3 出租意向预定4.4 出租单支付4.5 查询买家房屋销售交易单 五、免责说明 一、摘…...

STM32的简单介绍

STM32是一种基于ARM Cortex-M内核的32位微控制器,由意法半导体公司开发和生产。STM32具有丰富的外设和功能,适用于各种应用场合,如工业控制、消费电子、物联网、人机交互等。STM32的优势包括低功耗、高性能、高可靠性、易于开发等。STM32的系…...

浏览器同源策略及跨域问题

同源策略:同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。 同源策略的作用:保护浏览器中网站的安全,限制ajax只…...

【读书笔记】知识图谱概述

1、KG定义 1.1 背景知识 人工智能分为三个层次,分别是运算智能,感知智能和认知智能。运算智能是让机器能存会算;感知智能是让机器能听会说、能看会认;认知智能是解决机器能理解会思考的问题。由于知识图谱的数据组织方式是计算机…...

用尾插的思路实现 “合并两个有序链表”

一、题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] 输出&#…...

大数据 - Spark系列《十四》- spark集群部署模式

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…...

考研C语言复习进阶(2)

目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 4. 函数指针 5. 函数指针数组 6. 指向函数指针数组的指针 7. 回调函数 8.三步辗转法 9. 指针和数组笔试题解析 10. 指针笔试题 指针的主题,我们在初级阶段的《指…...

设计模式学习笔记 - 设计原则与思想总结:1.总结回顾面向对象、设计原则、编程规范、重构技巧等知识点

概述 对前面的内容的回顾,温故而知新,包括:面向对象、设计原则、规范与重构三个模块的内容。 1.代码质量评判标准 如何评价代码质量的高低? 代码质量的评价具有很强的主观性,描述代码质量的词汇也有很多&#xff0c…...

WPF图表库LiveCharts的使用

这个LiveCharts非常考究版本,它有非常多个版本,.net6对应的是LiveChart2 我这里的wpf项目是.net6,所以安装的是这三个,搜索的时候要将按钮“包括愈发行版”打勾 git:https://github.com/beto-rodriguez/LiveCharts2?…...

第十三届蓝桥杯省赛C++ C组《全题目+题解》

填空题一般都是找规律题目,耐下心来慢慢分析即可。 第一题《排列字母》 【问题描述】 小蓝要把一个字符串中的字母按其在字母表中的顺序排列。 例如,LANQIAO 排列后为AAILNOQ。 又如,GOODGOODSTUDYDAYDAYUP 排列后为AADDDDDGGOOOOPSTUUYYY。…...

Linux——线程池

目录 线程池的概念 线程池的优点 线程池的实现 【注意】 线程池的线程安全 日志文件的实现 线程池的概念 线程池也是一种池化技术,可以预先申请一批线程,当我们后续有任务的时候就可以直接用,这本质上是一种空间换时间的策略。 如果有任…...

Linux:搭建ntp服务器

我准备两个centos7服务器 一个为主服务器连接着外网,并且搭建了ntp服务给其他主机同步 另外一个没有连接外网,通过第一台设备去同步时间 首先两个服务器都要安装ntp软件 yum -y install ntp 再把他俩的时间都改成别的 左侧的是主服务器,主…...

unity学习(57)——选择角色界面--删除角色2

1.客户端添加点击按钮所触发的事件&#xff0c;在selectMenu界面中增加myDelete函数&#xff0c;当点击“删除角色”按钮时触发该函数的内容。 public void myDelete() {string message nowPlayer.id;//string m Coding<StringDTO>.encode(message);NetWorkScript.get…...

Flutter:构建美观应用的跨平台方案

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

【深度学习模型移植】用torch普通算子组合替代torch.einsum方法

首先不得不佩服大模型的强大之处&#xff0c;在算法移植过程中遇到einsum算子在ONNX中不支持&#xff0c;因此需要使用普通算子替代。参考TensorRT - 使用torch普通算子组合替代torch.einsum爱因斯坦求和约定算子的一般性方法。可以写出简单的替换方法&#xff0c;但是该方法会…...

鸿蒙 Harmony 初体验

前言 看现在网上传得沸沸扬扬的鸿蒙&#xff0c;打算弄个 hello world 玩一下, 不然就跟不上时代的发展了 环境安装 我的环境 Windows 11 家庭中文版HarmonyOS SDK (API 9)DevEco Studio (3.1.1 Release)Node.js (16.19.1) 开发IDE下载 官方下载链接 配置 nodejs 这里帮…...

Jmeter+ant,ant安装与配置

1.ant含义 ant&#xff1a;Ant翻译过来是蚂蚁的意思&#xff0c;在我们做接口测试的时候&#xff0c;是可以用来做JMeter接口测试生成测试报告的工具 2.ant下载 下载地址&#xff1a;Apache Ant - Ant Manual Distributions download中选择ant 下载安装最新版zip文件 3.…...

【MySQL基础】MySQL基础操作三

文章目录 &#x1f349;1.联合查询&#x1f95d;笛卡尔积 &#x1f349;2.内连接&#x1f95d;查询单个数据&#x1f95d;查询多个数据 &#x1f349;3.外连接&#x1f349;4.自连接&#x1f349;5.合并查询 &#x1f349;1.联合查询 &#x1f95d;笛卡尔积 实际开发中往往数…...

【K8s】肿么办??Kubernetes Secrets并不是Secret哟!!

【K8s】肿么办??Kubernetes Secrets并不是Secret哟!! 目录 【K8s】肿么办??Kubernetes Secrets并不是Secret哟!!Kubernetes Secrets为什么不认为 Base64 编码是密文?问题出现了以下是几种加密 K8s Secrets 的选项。Bitnami Sealed Secrets 介绍Bitnami Sealed Secrets…...

基于S7-200 PLC和MCGS组态的灌装贴标生产线系统:带解释的梯形图程序、接线图原理图图...

基于S7-200 PLC和MCGS组态的灌装贴标生产线系统 带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面车间里那台老灌装线最近被我折腾得焕然一新&#xff0c;用S7-200 PLC搭配MCGS组态搞了个自动化改造。这活儿干下来发现几个关键点特别有意思&#xff0c;尤…...

国产N32芯片开发避坑指南:J-Link在Keil中的特殊配置(含Cortex-M0配置模板)

国产N32芯片开发实战&#xff1a;J-Link调试配置深度解析与Keil环境优化 在国产MCU生态快速崛起的背景下&#xff0c;N32系列芯片凭借优异的性价比和本土化服务优势&#xff0c;正逐步成为工程师替代进口方案的新选择。然而&#xff0c;从传统ST芯片转向国产平台时&#xff0c;…...

AI辅助开发进阶:让快马智能助手帮你设计与优化专业图像处理库

今天想和大家分享一个很实用的开发经验——如何用AI辅助工具来优化和扩展专业图像处理库的开发。最近我在做一个Python图像处理工具库&#xff0c;正好用InsCode(快马)平台的AI功能做了些尝试&#xff0c;效果出乎意料的好。 先说说背景。这个工具库最初只有基础的图片缩放和滤…...

汽车电子选型:RF430F5144CIRKVRQ1为什么适合发动机舱附近的应用

RF430F5144CIRKVRQ1&#xff1a;这颗77mm的QFN芯片&#xff0c;如何把13.56MHz NFC和MSP430 MCU塞进一颗汽车级SoCRF430F5144CIRKVRQ1来自德州仪器&#xff0c;是一颗高度集成的NFC传感器收发器SoC。它的核心价值很直接&#xff1a;把13.56MHz HF射频前端、16位MSP430超低功耗M…...

07-打造个性化 AI 助手

OpenClaw 第七篇:记忆系统进阶——打造个性化 AI 助手 “Memory is the treasury and guardian of all things.” — Cicero 在人工智能领域,有一个永恒的挑战:如何让 AI 记住「我是谁」、「你是谁」,以及「我们之前聊过什么」。OpenClaw 作为新一代 AI 自动化平台,构建了…...

别再只盯着数据了!用Arduino+GP2Y1014AU传感器,手把手教你做个能“看见”空气的PM2.5监测仪

用Arduino打造智能PM2.5监测仪&#xff1a;从硬件连接到可视化交互 在空气质量日益受到关注的今天&#xff0c;拥有一个实时监测PM2.5浓度的设备不仅能提升生活品质&#xff0c;还能为健康保驾护航。不同于市面上千篇一律的商用监测仪&#xff0c;自己动手打造一个兼具实用性和…...

C++手动实现共享智能指针my_shared_ptr|引用计数+删除器+完整可运行代码

1.共享智能指针的概念 共享型智能指针就是做出一个像JAVA中垃圾回收器,并且可以运用到所有资源,heap内存和系统资源都可以使用的系统。 shared_ptr实现了共享所有权(shared ownership)方式来管理资源对象,这意味没有一个特定的shared_ptr拥有资源对象。相反,这些指向同一…...

LFM2.5-1.2B-Thinking-GGUF入门必看:轻量模型在离线环境中的安全合规部署

LFM2.5-1.2B-Thinking-GGUF入门必看&#xff1a;轻量模型在离线环境中的安全合规部署 1. 模型概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;专为低资源环境设计。这个1.2B参数的模型采用GGUF格式&#xff0c;能够在各种边缘设备上高效运行…...

Llama-3.2V-11B-cotGPU算力优化:双卡4090自动拆分模型实测报告

Llama-3.2V-11B-cot GPU算力优化&#xff1a;双卡4090自动拆分模型实测报告 1. 项目概述 Llama-3.2V-11B-cot是基于Meta最新多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡RTX 4090环境深度优化。作为一款11B参数规模的视觉推理工具&#xff0c;它解决了传统大模…...

08_Claude Code之高级工作流与自动化:循环、调度与并行批处理

08 Claude Code之高级工作流与自动化&#xff1a;循环、调度与并行批处理 Claude Code 的真正价值在于自动化能力&#xff0c;而不仅仅是对话工具。本文深度讲解 Plan Mode 的量化对比&#xff08;多文件重构成功率从62%到89%&#xff09;、非交互批处理脚本、并行处理架构、CI…...