Linux网络编程---多路I/O转接服务器(一)

本文介绍了多路I/O转接服务器的概念,重点讨论了select、poll和epoll三种I/O多路复用方法,包括它们的工作原理、函数解析以及各自的优缺点。通过实例展示了如何使用select实现多线程的服务器处理多个客户端连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多路I/O转接服务器(一)

多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。

主要使用的方法有三种:select、poll、epoll 

selectpollepoll 是三种用于 I/O 多路复用(I/O Multiplexing)的系统调用,它们主要用于在处理多个 I/O 事件时提高效率。它们的基本功能都是在一个或多个文件描述符上等待事件(如可读、可写或异常情况),但是它们在性能和使用上有所不同。

一、select多路IO转接

让内核去监听客户端连接(lfd),当有客户端进行连接时 它会让server去调用accetp(当有连接时才去立即调用,而不是一直阻塞等待)得到一个用于通信的cfd,最后让内核监管着lfd和所有cfd

即(原理):借助内核, select 来监听, 客户端连接、数据通信事件。

简单描述:c1要建立连接,被select监听到了,select报告老板,老板调用accecp函数(直接返回不用阻塞),把cfd交给select,让select和c1进行通信

阻塞、非阻塞忙轮询、响应式(多路IO转接)

借助select实现多线程

函数解析

1. 底层原理: 

文件描述符表:前三个默认被系统占用

fd_set集合:传入的是文件描述符,传出所有监听集合(读、写、异常)中满足对应事件的总数

fd_set集合的本质:位图(二进制位存放文件描述符的状态),默认都为0,若发生变化就置1

 2. 语法: 

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeva l *timeout);

参数

  • nfds:监听的所有文件描述符中,最大文件描述符+1;
  • readfds:读 文件描述符监听集合。传入传出参数
  • writefds:写 文件描述符监听集合。传入传出参数,通常传NULL
  • exceptfds:异常 文件描述符监听集合。传入传出参数,通常传NULL
  • timeout:大于0表示设置监听时长,NULL表示阻塞监听,0表示非阻塞监听 while轮询

返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值