嵌入式学习37-TCP并发模型

news2024/10/6 5:59:04

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

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  只能工作在水平触发模式(低速模式)                              与select相同                                                 无法工作在边沿触发(高速模式)

   


3.函数接口:
    1.select 
      int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);
      功能:
             select  监听  文件描述符集合                                                                                                              是否 有文件描述编程 ready状态

                                   

select  监听  文件描述符集合 ,若有状态 , 将没有ready状态的T除                                                                                                   若无状态,将阻塞继续等待                                                                参数:
        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:                                                                                                                                                           等待的时间   (非0)                                                                                                                                              (-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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux学习(1)——Linux文件目录

1.Linux目录层次标准 Linux文件系统最顶端的目录是——根目录:“/”,Linux所有文件和目录,都是挂载在根目录下面的。 可以在Linux终端中用“cd /”命令,进入到根目录下;再用“ls”命令,查看里面的各个子目录…

高级DBA带你处理MySQL集群爆表导致硬盘爆满系统产品宕机实际生产事故处理实战案例全网唯一

高级DBA带你处理MySQL集群爆表导致硬盘爆满系统产品宕机实际生产事故实战 一、事故描述 数据库某个表A其中用到了二进制字段,本来就无比巨大,再加上某个客户端阶段发生程序BUG,无限反复插入重复数据,导致一个大表一下午时间迅速…

网络地址转换协议NAT

网络地址转换协议NAT NAT的定义 NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因…

Java剖析 : HashMap底层存储数据的结构 | HashSet添加不重复元素底层原理

HashSet底层剖析 前言: 我们知道Set中所存储的元素是不重复的,那么Set接口的实现类HashSet在添加元素时是怎么避免重复的呢? ★ HashSet在添加元素时,是如何判断元素重复的? ● 在底层会先调用hashCode()&#xff0c…

2024年春招助学活动:一批FPGA高端项目让你轻松拿到大厂offer

这里写目录标题 1、前言2、FPGA行业现状3、简历怎么写4、FPGA高端项目4.1 图像类:FPGA图像缩放多路视频拼接4.2 通信类:千兆网UDP协议栈4.3 通信类:万兆网UDP协议栈4.4 图像通信综合:FPGA图像缩放UDP网络视频传输4.5 图像高速接口…

Sora背后的技术《可控生成与文本到图像扩散模型》

在迅速发展的视觉生成领域中,扩散模型革命性地改变了景观,以其令人印象深刻的文本引导生成功能标志着能力的重大转变。然而,仅依赖文本来条件化这些模型并不能完全满足不同应用和场景的多样化和复杂需求。认识到这一不足,多项研究…

day41 动态规划part3

343. 整数拆分 中等 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 但是dp[0] 和 dp[1]为什么是0值得讨论,或者说不用讨论,压根…

Anybus获得IEC 62443-4-1工业网络安全标准ML3认证

HMS 工业网络旗下 Anybus 品牌已成功获得国际电工委员会(IEC)62443-4-1:安全产品开发生命周期要求(一项工业网络安全标准)的 3 级成熟度(ML3)认证。 该认证由全球知名的测试服务提供商 TV Rhein…

vite配置

"vite": "^5.1.4" resolve.alias:配置别名 1、执行npm install -D types/node 或者 yarn add types/node -D 2、以下配置代表访问src时可以用“”代替 resolve: {alias: {"": path.resolve(__dirname, "./src"),},}, 使…

龙芯2K1000双核处理器主板支持SATA固态盘,4G,GPS,WIFI蓝牙等接口

硬件配置 国产龙芯处理器,双核64位系统,板载2GDDR3内存,流畅运行Busybox、Buildroot、Loognix、QT5.12 系统! 接口全 板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、 GPS接口WIFI、蓝牙、Mini…

Java零基础入门到精通_Day 1

01 Java 语言发展史 Java语言是美国Sun公司(StanfordUniversity Network)在1995年推出的 计算机语言Java之父:詹姆斯高斯林(ames Gosling) 重要的版本过度: 2004年 Java 5.0 2014年 Java 8.0 2018年 9月 Java 11.0 (目前所使用的) 02 J…

Altair® Flux® 仿真软件加速电机、传感器和执行器设计

Altair Flux 仿真软件加速电机、传感器和执行器设计 Flux 着眼于机电设备的复杂性,旨在精确优化其性能、效率、尺寸、成本或重量,为终端用户带来更优质的创新的以及高价值的产品。Flux 可对静磁、交流稳态和瞬态条件,以及电热特性进行仿真。…

【办公类-40-02】20240311 python模仿PPT相册功能批量插入照片,更改背景颜色 (家长会系列二)

作品展示——用Python插入PPT相册 背景需求: 马上就要家长会,我负责做会议前的照片滚动PPT,通常都是使用PPT的相册功能批量导入照片, 生成给一个新的PPT文件 更改背景颜色 设置4秒间隔,应用到全部 保存,改…

Midjourney从入门到实战:图像生成命令及参数详解

目录 0 专栏介绍1 Midjourney Bot常用命令2 Midjourney绘图指令格式3 Midjourney绘图指令参数3.1 模型及版本3.2 画面比例3.3 风格化3.4 图片质量3.5 混乱值3.6 随机数种子3.7 重复贴图3.8 停止3.8 垫图权重3.9 提示词权重分割 0 专栏介绍 🔥Midjourney是目前主流的…

FastAPI 学习笔记

FastAPI 学习笔记 0. 引言1. 快速开始2. 升级示例代码 0. 引言 在 Python 这个充满活力的生态系统中,FastAPI 应运而生,它是一个现代的、快速的 Web 框架,专注于构建 RESTful API。 无论你是一名有经验的 Python 开发人员,还是一…

Flask python 开发篇:项目布局

一、背景简介 Flask应用程序可以像单个文件一样简单。就像上一篇简单实现一个接口一样,所有的东西都在一个python文件内; 然而,当项目越来越大的时候,把所有代码放在单个文件中就有点不堪重负了。 Python 项目使用 包 来管理代码…

2023年第三届中国高校大数据挑战赛第二场赛题D题赛题:行业职业技术培训能力评价(成品论文 代码与思路 视频讲解)

赛题 中国是制造业大国,产业门类齐全,每年需要培养大量的技能娴熟的技术工人进入工厂。某行业在全国有多所不同类型(如国家级、省级等)的职业技术培训学校,进行 5 种技能培训。学员入校时需要进行统一的技能考核&…

Python之禅——跟老吕学Python编程

Python之禅——跟老吕学Python编程 Python之禅1.**Beautiful is better than ugly.**2.**Explicit is better than implicit.**3.**Simple is better than complex.**4.**Complex is better than complicated.**5.**Flat is better than nested.**6.**Spare is better than den…

每日学习笔记:C++ STL 的List

定义 特点 操作函数 关于c.merge(c2)的分析,详见: 。。。。 C list merge()用法及代码示例 - 纯净天空 (vimsky.com) 异常安全性 运用实例

WPF Button去除按钮边框,添加下划线

<Button Width"45" Height"25" FontSize"20" Background"Transparent" BorderBrush"Transparent" Foreground"#FFC9A322" Click"Btn_Retry_Click" ><TextBlock><Underline>重试</…