目录
多路复用是什么?
IO 多路复用是指内核一旦发现了进程指定的一个或者多个IO条件准备读取,他就会通知该进程。也就是说,通过一种机制,可以监听多个文件描述符,一旦某个文件描述符就绪,一般是读就绪和写就绪,就会通知程序进行相应的读写操作,这种机制需要使用select\poll\epoll来配合。
在多路复用IO模型中,或有一个内核线程不断去轮询多个socket的状态,只有当真正读写事件发送时,才真正调用实际的IO读写操作,因为在多路复用IO模型中,只需要使用一个线程就可以管理多个socket,系统不需要建立新的进程或者线程,也不必去维护,只有真正的读写事件进行时,才会使用IO资源,所以他大大减少来资源占用。
IO多路复用是使用select或者poll函数向系统内核发起调用,阻塞在这两个系统的函数调用,而不是真正的阻塞于实际的IO操作,recvfrom调用才是实际阻塞IO操作的系统调用
阻塞于select的函数的调用,等待数据报套接字可变为可读状态
当select套接字返回可读状态的时候,就可以发起recvfrom调用把数据报复制到用户空间的缓存区。
IO多路复用适合如的场景
①当客户处理多个描述字时(网络套接字),必须使用IO复用。
②当一个客户同实时处理多个套接字时。
③如果一个TCP服务器及要处理监听套接字,又要处理已连接套接字
④如果一个服务器既要处理TCP,又要处理UDP
⑤如果一个服务器要处理多个服务或者多个协议
与多进程和多线程进行比较
与多进程和多线程进行比较,多路复用可以减小系统开销,让系统不必创建多进程和多线程,也不必维护多进程和多线程。
多路复用—select
该函数允许监听的文件描述符个数上限,32位机默认是1024个。64位机默认是2048.底层数据结构是数组
目前在所有平台都支持&#x