首页 > 其他分享 >IO复用-代替多线程

IO复用-代替多线程

时间:2025-01-04 11:23:04浏览次数:1  
标签:int maxfd rfds 复用 rset FD IO sockfd 多线程

select

//select(maxfd,rset,wset,eset,timeout);  r读,w写,e错误,timeout多长时间轮询一次
//有事件就返回
//rset-->  uL fds_bites[_FD_SIZE/(8*sizeof(long))]
//#define _FD_SIZE 1024 默认值1024,内核定义

fd_set rfds , rset;
FD_ZERO(&rfds);
FD_SET(sockfd,&rfds);

int maxfd=sockfd;

while(1){
    rset=rfds;
    int nready=select(maxfd+1,&rset,NULL,NULL,NULL);//事件个数

    if(FD_ISSET(sockfd,&rset)){
        
        int clientfd=accept(sockfd,(struct sockaddr*)&clientaddr,&len);

        FD_SET(clientfd,&rfds);
        maxfd=clientfd;
          
    }
    int i=0;
    for(i=sockfd+1;i<=maxfd;i++){
        if(FD_SET(i,&rset)){
            // 读事件,发送
            //FD_CLR(i,&rfds);close(i);
            //第一层bit_set。第二层系统io
        }
    }
}

缺点:
内核每一次都需要拷贝rset,拷贝整个,有很多不需要;IO数量有限制;参数较多,许都需要单独维护

标签:int,maxfd,rfds,复用,rset,FD,IO,sockfd,多线程
From: https://www.cnblogs.com/blogofzcfu/p/18651685

相关文章

  • permutations函数和combinations函数使用
    https://www.cnblogs.com/kaka00311/p/16114944.html pythonitertools模块中全排列函数包含combinations函数和permutations函数,简要介绍如下:1、combinations函数函数语法:combinations(iterable,r)连续返回由iterable元素生成长度为r的序列,如果r未指定或为None,r......
  • Stable Diffusion的加噪和去噪详解
    本文详细介绍StableDiffusion的加噪和去噪过程中的调度算法和采样算法,包括部分公式的讲解。目录调度和采样加噪过程调度算法采样算法加噪过程概述加噪过程的主要组成部分加噪过程的步骤去噪过程调度算法采样算法去噪过程概述去噪过程的主要组成部分去噪过程......
  • Stable Diffusion超详细教程!从0-1入门到进阶
    一、本地部署StableDiffusion(全套教程文末领取哈)前言目前市面上比较权威,并能用于工作中的AI绘画软件其实就两款。一个叫Midjourney(简称MJ),另一个叫Stable-Diffusion(简称SD)。MJ需要付费使用,而SD开源免费,但是上手难度和学习成本略大,并且非常吃电脑配置(显卡、内存)。E和Mid......
  • Stable Diffusion 常用模型下载与说明(保姆级)
    相比于Midjourney,StableDiffusion最大的优势就是开源。相比于Midjourney靠开发人员开发的少数模型,SD则每时每刻都有人在世界各地训练自己的模型并免费公开共享给全世界的使用者。(当然你可以通过训练自己的专有模型而专门用于某一用途,这也将成为你作为AI绘画者的最重要的核......
  • JavaScript的变量声明(Variable Declaration)
    Python基础引言在当今科技高速发展的时代,编程语言的学习变得愈加重要。作为一种简单易学而功能强大的编程语言,Python受到越来越多编程爱好者和专业人士的青睐。《Python基础》这一文旨在为初学者提供一个全面的Python入门指南,帮助读者从零开始,逐步掌握这门语言的基本概念......
  • JavaScript的数据封装(Data Encapsulation)
    Python基础Python是一种高级编程语言,由GuidovanRossum于1991年首次发布。由于其简单易读的语法、强大的功能和丰富的库,Python已经成为当今最受欢迎的编程语言之一。无论您是初学者还是有经验的开发者,掌握Python都将为您的编程之路打开新的大门。在本文中,我们将探讨Python......
  • 请解释下XHR,ajax,axios,fetch,vue-resource的相同和不同有哪些?
    在前端开发中,XHR(XMLHttpRequest)、Ajax(AsynchronousJavaScriptandXML)、Axios、Fetch和Vue-resource都是用于处理HTTP请求的工具或技术。它们各有特点和用途,下面是对它们的相同点和不同点的解释:相同点:发送HTTP请求:这些技术都能够发送HTTP请求,与服务器进行通信。异步处理......
  • tryhackme-Cyber Security 101-Exploitation Basics(漏洞利用基础知识)-Blue(蓝)
    利用常见的错误配置问题,部署并入侵Windows机器。这个房间有个教学视频。可以根据这个视频复现。任务1:侦察按下面的 启动机器 按钮。按此页面顶部的 StartAttackBox按钮启动AttackBox。AttackBox机器将在分屏视图中启动。如果它不可见,请使用页面顶部的蓝色 Show......
  • FJSP:部落竞争与成员合作算法(Competition of tribes and cooperation of members ,CTCM)
    一、柔性作业车间调度问题柔性作业车间调度问题(FlexibleJobShopSchedulingProblem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成,每个工序需要在特定的机器上完成。同时,每个机器一次只能处理一个工序,且每个工......
  • 【PHP编程】PHP Session 设置
    “在Web开发中,Session管理是非常重要的一个环节。通过Session,我们可以跟踪用户的状态,存储用户特定的信息,以及执行其他与用户会话相关的操作。”PHP提供了强大的Session功能,使得开发者可以轻松地设置和管理Session。本篇文章将深入探讨如何在PHP中设置Session,并通过丰富的代码示......