首页 > 其他分享 >多路复用epoll

多路复用epoll

时间:2023-05-07 17:45:06浏览次数:31  
标签:poll 多路复用 epoll create 描述符 include select

epoll基本原理

  • epoll 相对于 select 与 poll 有较大的不同,主要是针对前面两种多路复用 IO 接口的不足
    • 与 select/poll 方案对比
      • select 方案使用数组存储文件描述符,最大支持 1024
      • select 每次调用都需要将描述符集合拷贝到内核中,非常消耗资源
      • poll 方案解决文件描述符存储数量限制问题,但其他问题没有得到解决
      • select / poll 底层使用轮询的方式检测文件描述符是否就绪,文件描述符越多,则效率越低
      • epoll 底层使用红黑树,没有文件描述符数量的限制,并且可以动态增加与删除节点,不用重复拷贝
      • epoll 底层使用callback 机制,没有采用遍历所有描述符的方式,效率较高
  • 下面以老师检查学生作业为例,来看两种方案
    • select/poll方案
    • epoll方案

epoll创建

  • epoll 创建需要调用 epoll_create 函数,用于创建 epoll 实例
  • 函数头文件
    • #include <sys/epoll.h>
  • 函数原型
    • int epoll_create(int size);
  • 函数功能
    • 创建一个 epoll 实例,分配相关的数据结构空间
  • 函数参数
    • size: 需要填一个大于0的数,从 Linux 2.6.8 开始,size 参数被忽略
  • 函数返回值
    • 成功 : 返回 epoll 文件描述符
    • 失败: 返回-1,并设置 errno
#include <stdio.h>
#include <stdlib.h>
#include <sys/epoll.h>

int main(void){
        int fid = epoll_create(1);
        if(fid == -1){
                perror("[ERROR] epoll_create();");
                exit(EXIT_FAILURE);
        }
        printf("%d\n",fid);
        return 0;
}

标签:poll,多路复用,epoll,create,描述符,include,select
From: https://www.cnblogs.com/shubin/p/17379662.html

相关文章

  • python IO多路复用理解记录
    一、简述:1什么是多路I/O复用机制Python中的多路I/O复用机制是一种高效的编程技巧,用于同时监视多个文件描述符是否有可读、可写或错误事件,并在这些描述符中任意一个或多个有事件发生时立即进行响应。2使用多路I/O复用机制的目的同时处理多个连接时提高网络I/O效率,从......
  • C++ linux epoll并发服务器模型初探
    socket通讯流程图最简单的可以通讯的C++服务器端代码:#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#defineSERV_PORT8000intmain(void){intlfd......
  • 高级I/O复用技术:Epoll的使用及一个完整的C实例
           高性能的网络服务器需要同时并发处理大量的客户端,而采用以前的那种对每个连接使用一个分开的线程或进程方法效率不高,因为处理大量客户端的时候,资源的使用及进程上下文的切换将会影响服务器的性能。一个可替代的方法是在一个单一的线程中使用非阻塞的I/O(non-blocking......
  • IO多路复用介绍
    IO多路复用IO多路复用是一种高效的IO操作方式,可以实现同时监听多个文件描述符,将阻塞等待IO操作的时间最大化地利用起来,提高系统的性能和响应速度。常见的IO多路复用技术包括select、poll和epoll等,它们都可以实现在一个线程中同时处理多个IO事件,而无需创建多个线程或进程,从而节省......
  • select、poll、epoll
    1、select   2、poll    ==到底哪个读写分离??==3、epoll    epoll_wait中的events是怎么得到监听事件的?通过socket吗? ......
  • 【webserver 前置知识 03】Linux网络编程入门其二,I/O多路复用
    I/O多路复用I/O多路复用使得程序能够同时监听多个文件描述符LInux下实现I/O多路复用的系统调用主要由select、poll以及epoll(常问,要会自己写出来)例子阻塞等待阻塞等待可以一定程度上提高程序运行的效率优点是:不占用cpu的时间片;缺点是:同一时刻只能处理一个操作,效率较低;使用......
  • epoll底层原理
    1.进程socket描述2.accept简单流程SYSCALL_DEFINE4(accept4,int,fd,structsockaddr__user*,upeer_sockaddr, int__user*,upeer_addrlen,int,flags){ structsocket*sock,*newsock; structfile*newfile; interr,len,newfd,fput_needed; structsockaddr_......
  • go语言学习-slect多路复用和锁
    select在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。Go内置了select关键字,可以同时响应多个通道的操作。select的使用......
  • IO多路复用形象举例
    IO多路复用的形象举例IO多路复用意义接着上面的例子,IO多路复用的作用就是为了管理这些服务员,以便于提供点菜的服务方法1:select‘找一个人专门去咨询,拿着三个本......
  • tcp网络编程4—并发的io多路复用实现(select)
    原型:intselect(intmaxfdp1,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)功能:委托内核检查描述符集是否准备好(即可以......