首页 > 其他分享 >如何理解 select、poll 和 epoll (大白话版)

如何理解 select、poll 和 epoll (大白话版)

时间:2024-12-02 22:32:50浏览次数:13  
标签:检查 epoll 名单 住户 poll select

用生活中的场景类比,可以更容易理解 selectpollepoll 的工作原理和区别。

1. select:固定值班表,逐个检查

想象你是一个前台管理员,有一张固定的名单,上面列了 100 个人的名字(比如说住户)。你需要每隔一段时间检查这 100 个人是否需要服务(比如是否需要收信件)。

怎么做?

  • 你一个个地叫名字:“小张,有事吗?”、“小王,有事吗?”……直到全部检查完。
  • 这样效率比较低,尤其是名单很长的时候(即便只有 1 个人有事,你也得把 100 个人都叫一遍)。

特点:

  • 每次都要检查整张名单,效率低。
  • 如果名单人数超过前台管理员的记忆容量(比如最大 1024),就没办法继续处理了。

2. poll:灵活的值班表,逐个检查

现在你升级了一下,把固定的名单换成了一本活页笔记本,想加入谁的名字都可以。但是,检查的方式还是一样的,一个一个问。

怎么做?

  • select 的方式类似,你依然需要逐一检查所有名字。
  • 好处是,名单变灵活了,你想放多少人就放多少人。

特点:

  • 名单大小不再受限制。
  • 但是效率没有本质提升,因为你还是需要一个个检查。

3. epoll:智能通知机制,自己来找你

你变得更聪明了,不再一个个去问住户,而是安装了一个“服务通知系统”。当某个住户需要服务时,他们会按门铃通知你,你只需要处理那些按了门铃的住户就行。

怎么做?

  • 把所有住户的名字登记在系统里,住户有事就会自己通知你。
  • 你只处理那些真的按了门铃的人,其他不需要服务的住户,你完全不用理会。

特点:

  • 不用逐一检查名单了,效率大幅提高。
  • 特别适合大规模住户的情况(比如几万个住户,只有少部分需要服务时)。
  • 你可以设置不同的通知方式:比如“每次有事就通知”(水平触发)或者“只通知一次”(边缘触发)。

总结一下:

  • select:就像一个呆板的前台管理员,每次都按固定名单挨个检查,名单太长时效率很低。
  • poll:和 select 差不多,但换了个更大的本子,可以装更多名字。
  • epoll:有了智能通知系统,住户有事自己通知,效率最高,尤其适合住户多的情况下。

所以,如果你管理的住户(文件描述符)很少,selectpoll 都能用。但如果住户特别多,而且只有一部分人会需要服务,那 epoll 会是最明智的选择!

标签:检查,epoll,名单,住户,poll,select
From: https://blog.csdn.net/yuguo_im/article/details/144200064

相关文章

  • 有了解过`getSelection`API吗?怎么使用,有哪些场景?
    getSelection()API是一个用于获取用户在网页上选择的文本的JavaScriptAPI。它返回一个Selection对象,该对象包含有关所选文本的信息,例如所选文本的内容、起始位置和结束位置等。使用方法:constselection=window.getSelection();if(selection.rangeCount>0){//检......
  • Seata使用Apollo作为配置中心
    预备工作​当您将apollo-client整合到您的Seata工程之前,请确保后台已经启动Apollo服务。如果您尚且不熟悉Apollo的基本使用的话,可先行参考 Apollo快速入门。建议使用Apollo 1.6.0 及以上的版本。快速上手​Seata融合Apollo配置中心的操作步骤非常简单,大致步骤......
  • getelementbyId和queryselect平时经常使用哪一个?说说你的看法
    在前端开发中,getElementById和querySelector都是用于选择HTML元素的常用方法,但它们各有优缺点,适用场景略有不同。我通常会根据具体情况选择更合适的方法:getElementById:优点:速度最快:因为它直接通过ID查找,浏览器可以进行优化,使其速度非常快。代码简洁:语法简单,易......
  • 基本的select语句(11.30)
    SQL的分类:DDL:数据定义语言。create、alter、drop、rename、truncate(清空)、DML:数据操作语言。insert、delete、update、selectDCL:数据控制语言。commit、rollback(撤销,回滚)、savepoint、grant、revokeSQL的规则:(必须遵守)SQL可以写在一行或者多行。为了提高可读性,各子句分行......
  • Navicat-navicat15连接PG15数据库报错“字段“datlastsysoid“不存在LINE 1: SELECT D
    报错信息:错误:字段“datlastsysoid“不存在LINE1:SELECTDISTINCTdatlastsysoidFROMpgdatabase根因:Postgres15从pg_database表中删除了datlastsysoid字段引发此错误。解决方案:修改libcc.dll文件1、用在线工具hexed.it打开libcc.dll文件地址:https://hexed.it/如......
  • epoll得特点
    epoll的主要优点包括:高效的文件描述符管理:epoll使用一组红黑树和双向链表来管理文件描述符,这使得添加、删除和查找操作更加高效。水平触发和边缘触发:epoll支持水平触发(LevelTriggered,LT)和边缘触发(EdgeTriggered,ET)两种模式,其中LT模式下,只要文件描述符......
  • 手动实现vue3的select下拉框的滚动加载和虚拟滚动,简单易懂
    首先,滚动加载和虚拟滚动都是为了解决数据量大的渲染性能问题,但是也有区别,滚动加载并没有从根本上解决问题,只是滚动到可视区域底部动态加载,二虚拟滚动是永远只渲染固定数量(通常是可视区域内)的所以可以从根本上解决这种性能问题。如果只想了解滚动加载只看第一部分即可。这两种技......
  • CComboBox的SelectString函数有弊端-m_combo_xxx_.SelectString(0, strTxt); 重复
    CComboBox的SelectString函数有弊端CComboBox中字符串通过AddString添加后,比如天气1、天气2、天气222,天气234 CComboBox调用SelectString(0,_T("天气2"))函数有弊端。可能会选择的是 天气222应该用for循环判断m_comBoText.GetWindowText(strText);if(strText==你要选择......
  • 记录Vue Antd 表格RowSelection刷新列表后缓存问题
    起因 原来的代码//tsx部分<BaseTableoptions={tableData.options}columns={tableData.columns}data={tableData.data}/>constselectKeys=ref<string[]>([])//表格配置consthandleRowSelection={......
  • 强大的jquery下拉分页选择插件SelectPage
    SelectPage.js是一款强大的jquery下拉分页选择插件。SelectPage.js下拉分页选择插件界面简洁,支持下拉,分页,键盘操作等功能。它的特点还有:在线演示  下载 插件基于jQuery开发,可在Bootstrap2、3环境下使用,亦可在原生无UI框架的环境下直接使用。兼容Bootstrap2、3样式,以及非......