当前位置: 首页 > 面试题库 >

I/O多路复用轮询技术select和epoll的区别是什么?

充鑫鹏
2023-03-14
本文向大家介绍I/O多路复用轮询技术select和epoll的区别是什么?相关面试题,主要包含被问及I/O多路复用轮询技术select和epoll的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下

select: 它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。同时处理的流越多,无差别轮询时间就越长。
epoll : 可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)的,此时我们对这些流的操作都是有意义的

 类似资料:
  • Libevent的核心是事件驱动、同步非阻塞,为了达到这一目标,必须采用系统提供的I/O多路复用技术,而这些在Windows、Linux、Unix等不同平台上却各有不同,如何能提供优雅而统一的支持方式,是首要关键的问题,这其实不难,本节就来分析一下。 1 统一的关键 Libevent支持多种I/O多路复用技术的关键就在于结构体eventop,这个结构体前面也曾提到过,它的成员是一系列的函数指针,

  • 更多面试题总结请看:【面试题】技术面试题汇总 从阻塞 I/O 到 I/O 多路复用 阻塞 I/O,是指进程发起调用后,会被挂起(阻塞),直到收到数据再返回。如果调用一直不返回,进程就会一直被挂起。因此,当使用阻塞 I/O 时,需要使用多线程来处理多个文件描述符。 多线程切换有一定的开销,因此引入非阻塞 I/O。非阻塞 I/O 不会将进程挂起,调用时会立即返回成功或错误,因此可以在一个线程里轮询多个

  • 主要函数 函数 描述 [[epoll_create epoll_create]] 创建一个epoll的文件描述符 [[epoll_ctl epoll_ctl]] epoll的事件注册函数 [[epoll_wait epoll_wait]] 收集在epoll监控的事件中已经发送的事件 结构体 epoll_event typedef union epoll_data { void *ptr;

  • 函数原型 #include <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 参数 nfds 指定被监听的文件描述符的总数。它通常被设置为select()监听的最大文件描述符加1(文

  • 问题内容: 我最近在读Redis。Redis基于I / O复用实现了一个简单的事件驱动库。Redis表示将选择系统支持的最佳多路复用,并提供以下代码: 我想知道它们是否存在根本的性能差异?如果是这样,为什么? 最好的祝福 问题答案: 通常,所有异步I / O子系统都有不同的内部结构,但是在当前特定情况下,这些具体的异步I / O库用于支持尽可能多的平台。那是: evport = Solaris 1

  • java nio select的代码和linux epoll的代码看起来是一样的。没有循环来获取套接字fd,linux选择代码片段确实使用循环来获取套接字fd。 所以我的问题是,java nio select和linux epoll的方式相同吗? java nio选择 linux e轮询 linux选择