select和epoll概念

news/2024/7/9 17:34:04 标签: epoll, 数据结构与算法

关于linux的I/O复用接口select和epoll,下列说法错误的是()

select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历
select的最大连接数为FD_SETSIZE
select较适合于有大量并发连接,且活跃链接较多的场景
epoll较适用于有大量并发连接,但活跃连接不多的场景
epoll的效率不随FD数目增加而线性下降
epoll通过共享存储实现内核和用户的数据交互



select 和 epoll效率差异的原因:select采用轮询方式处理连接,epoll是触发式处理连接。
Select:
1.Socket数量限制:该限制可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.
2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍。
 
Epoll
1.Socket数量无限制:该模式下的Socket对应的fd列表由一个数组来保存,大小不限制(默认4k)。
2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询。
但当所有的Socket都活跃的时候,所有的callback都被唤醒,会导致资源的竞争。既然都是要处理所有的Socket,
那么遍历是最简单最有效的实现方式。
select
  • select能监控的描述符个数由内核中的FD_SETSIZE限制,仅为1024,这也是select最大的缺点,因为现在的服务器并发量远远不止1024。即使能重新编译内核改变FD_SETSIZE的值,但这并不能提高select的性能。
  • 每次调用select都会线性扫描所有描述符的状态,在select结束后,用户也要线性扫描fd_set数组才知道哪些描述符准备就绪,等于说每次调用复杂度都是O(n)的,在并发量大的情况下,每次扫描都是相当耗时的,很有可能有未处理的连接等待超时。
  • 每次调用select都要在用户空间和内核空间里进行内存复制fd描述符等信息。

poll

  • poll使用pollfd结构来存储fd,突破了select中描述符数目的限制。
  • 与select的后两点类似,poll仍然需要将pollfd数组拷贝到内核空间,之后依次扫描fd的状态,整体复杂度依然是O(n)的,在并发量大的情况下服务器性能会快速下降。

epoll

  • epoll维护的描述符数目不受到限制,而且性能不会随着描述符数目的增加而下降。
  • 服务器的特点是经常维护着大量连接,但其中某一时刻读写的操作符数量却不多。epoll先通过epoll_ctl注册一个描述符到内核中,并一直维护着而不像poll每次操作都将所有要监控的描述符传递给内核;在描述符读写就绪时,通过回掉函数将自己加入就绪队列中,之后epoll_wait返回该就绪队列。也就是说,epoll基本不做无用的操作,时间复杂度仅与活跃的客户端数有关,而不会随着描述符数目的增加而下降。
  • epoll在传递内核与用户空间的消息时使用了内存共享,而不是内存拷贝,这也使得epoll的效率比poll和select更高。

 

 fopen 和 exit fopen是打开文件的函数,文件也可以看成是一个设备,打开一个设备将导致给设备所属的驱动程序发送一个IRP,而与真实硬件相关的驱动程序都运行于内核. exit函数是结束进程的函数,结束进程需要访问PCB(进程控制块)和TCB(线程控制块)等等一些数据结构,而这些数据都存在于内核中.原因很简单 memcpy 和 strlen 我们可以直接不调用任意函数写出来这种函数肯定不会实现在内核的

转载于:https://www.cnblogs.com/guxuanqing/p/5925580.html


http://www.niftyadmin.cn/n/1063718.html

相关文章

计算机声音处理说课稿,《声的利用》说课稿

《声的利用》说课稿作为一位无私奉献的人民教师,就不得不需要编写说课稿,说课稿可以帮助我们提高教学效果。说课稿要怎么写呢?下面是小编整理的《声的利用》说课稿,希望能够帮助到大家。一、教材分析。《声的利用》是义务教育课程…

解决sdk版本与ADT版本不符合的办法

This Android SDK requires Android Developer Toolkit version 20.0.0 or above 本人最近在操作更新ANDROID SDK时出现类似于题目中的错误,是一启动ECLIPSE时。但是,我现在只是想恢复到原先的开发环境。于是找到本文,方法有效!&a…

LeetCode Decode String

原题链接在这里:https://leetcode.com/problems/decode-string/#/description 题目: Given an encoded string, return its decoded string. The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being r…

谢欣伦 - 原创软件 - 游戏专题 - 我的桌面My Desktop

今天在网上看到一个用桌面背景当做拼图内容的游戏很新颖,反正今天下雨我也闲着,索性用了半天时间做了一个类似的游戏《MyDesktop》。做完后立即分享给了两个朋友,他俩都被吓坏了。现在分享给大家,空闲的时候轻松一下,别…

java错误缺少class_如何解决java.lang.NoClassDefoundError?

如何解决java.lang.NoClassDefoundError?我在Oracle的Java教程..它们都编译得很好,但在运行时,它们都出现了以下错误:Exception in thread "main" java.lang.NoClassDefFoundError: graphics/shapes/Squareat Main.main…

上转型对象

class Human{ public void drink() } class YongMan extends Human{ public void drink()} } public class Test{ public static void main(String arge[]){ Human e2new YongMan(); e2.drink(); } } 以上面这个程序为例子Human e2new YongMan();这句其实是指父类对象e2是子类Y…

浙江移动智能语音服务器,电视还能这样玩?中国移动智能语音遥控器,让电视机听你的...

原标题:电视还能这样玩?中国移动智能语音遥控器,让电视机听你的随着物联网技术的快速发展,我们的生活也变得越来越便利。智能家居、远程监控、智慧安防等,先进的科技让我们的生活有了更多惊喜。而现在,中国…

混合开发的框架的初步见解

我们现在目前市面上最为流行的一种框架就是混合开发框架,它可以用最少的人来做更多的多的事,是一些中小公司所欣赏的框架,下面我来给大家分享一下:开始学习移动开发真是最好不过了,每个人应该都有一些移动应用的创意&a…