一些方便记忆的小例子

2023-11-15

epoll和select的小例子:

先看一下epoll和select的区别:
        对于select来说,所有文件描述符都是在用户态被加入其文件描述符集合的,每次调用都需要将整个集合拷贝到内核态;epoll则将整个文件描述符集合维护在内核态,每次添加文件描述符的时候都需要执行一个系统调用。系统调用的开销是很大的,而且在有很多短期活跃连接的情况下,epoll可能会慢于select由于这些大量的系统调用开销。

其他的区别这个例子不是很合适,如果有合适的例子可以分享出来。以下是其他区别可供参考。

  • select使用线性表描述文件描述符集合,文件描述符有上限;epoll底层通过红黑树来描述,并且维护一个ready list,将事件表中已经就绪的事件添加到这里,在使用epoll_wait调用时,仅观察这个list中有没有数据即可。
  • select的最大开销来自内核判断是否有文件描述符就绪这一过程:每次执行select调用时,它们会采用遍历的方式,遍历整个文件描述符集合去判断各个文件描述符是否有活动;epoll则不需要去以这种方式检查,当有活动产生时,会自动触发epoll回调函数通知epoll文件描述符,然后内核将这些就绪的文件描述符放到之前提到的ready list中等待epoll_wait调用后被处理。
  • select和poll都只能工作在相对低效的LT模式下,而epoll同时支持LT和ET模式。

划重点,小例子来了:

        每个人学生时代可能都碰到过,放假或者放学把书都装回去的同学,或者自己就是那个 同学,放假和放学都需要写作业,有的同学是把写作业所需的课本拿回家,有的同学是将课本全部拿回家,这就区分了,记将所需课本拿回家的同学为同学A,将所有课本都拿回家的同学为同学B。

        同学A就是epoll,他将课本放在学校也就是维持在了内核态,但是如果他回到家了,老师又留了一个作业,他回学校取,这就是执行了一次系统调用,所以如果频繁的发生这种事就会很糟糕,很麻烦,系统开销所以就大了。同学B就是select,将所有的课本都拿回家,相当于拷贝了全部的,不会因为发生同学A那样的事情而造成大量的系统开销。

算法二分查找的小例子/小应用:

具体思想不在陈述了,举一个小例子,假如在图书馆借阅图书时,借了十本书,走过检测门时发现有图书没登记就被拿走了,加入这十本中只有一本没有登记,如何简单的找出来,一本一本的扫无疑是慢的,可以使用二分法,十本书,分成五五两组,走过去扫,看看哪一组响警报,响警报的那一组继续分,分成二三两组用同样的方法,继续分,这样提高了效率,节省了次数。

进程和程序之间的区别

        想象一位有一手好厨艺的计算机科学家正在为他的女儿烘焙生日蛋糕。他有做蛋糕的食谱,厨房里有所需的原料:面粉、鸡蛋、糖、香草汁等。在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法),计算机科学家就是处理器(CPU),而做蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和。

        现在假设计算机科学家的儿子跑进来了,说他的头被一只蜜蜂蛰了。计算机科学家就记录下他照着食谱做到哪了(保存进程的当前状态),然后拿出一本急救手册,按照其中的知识处理蛰伤。这里,处理及从一个进程(做蛋糕)切换到另一个高优先级的进程(实施医疗救治),每个进程拥有各自的程序(食谱和急救手册)。当蜜蜂蛰伤处理完之后,这位科学家又回来做蛋糕,从他离开时的那一步开始做。

        这里的关键思想是:一个进程是 某种类型的一个活动,他有程序、输入、输出以及状态。单个处理器可以被若干进程共享,他使用某种调度算法决定合适停止一个进程的工作,并转而为另一个进程提供服务。

值得注意的是,如果一个程序运行了两遍,则算作两个进程。例如,人们可能经常两次启动同一个字处理软件,或在有两个可用的打印机的情况下同时打印两个文件。像“两个进程恰好运行同一个程序”这样的事实其实无关紧要,因为他们是不同的进程。操作系统能够使她们共享代码,因此只有一个副本放在内存中,但那只是一个技术性的细节,不会改变有两个进程正在运行的概念。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一些方便记忆的小例子 的相关文章

随机推荐

  • 10分钟内用Ezo和Python构建以太坊Oracle

    上一篇 我写了用Web3 js构建以太坊Oracle 这个练习给了我一些新的Web3 js 1 0版本知识 许多新的好东西可供选择而且使用它实现一个简单的oracle非常容易 但是 显然必须有更好的方法 Instant Oracles 只需
  • SQL语句中的日期计算

    SQL语句中的日期计算 1 本月的第一天 SELECT DATEADD mm DATEDIFF mm 0 getdate 0 2 本月的最后一天 SELECT dateadd ms 3 DATEADD mm DATEDIFF m 0 get
  • hotmail手机端_hotmail邮箱登陆手机版 参见http://help.

    讲到邮箱 我们很多人都知道 有人问hotmail邮箱 还有人问hotmail邮箱登陆手机版 这到底是咋回事 实际上hotmail邮箱呢 小编为大家带来hotmail邮箱登陆手机版 希望你喜欢 hotmail邮箱登陆手机版 您好 你手机如果是
  • C#软件外包开发流程

    C 是一种由微软开发的多范式编程语言 常用于开发各种类型的应用程序 从桌面应用程序到移动应用程序和Web应用程序 下面和大家分享 C 编程学习流程 希望对大家有所帮助 北京木奇移动技术有限公司 专业的软件外包开发公司 欢迎交流合作 1 基础
  • 前缀、中缀、后缀表达式(逆波兰表达式)

    中缀表达式 简介 中缀表达式就是常见的运算表达式 如 3 4 5 6 前缀表达式 简介 前缀表达式又称波兰式 前缀表达式的运算符位于操作数之前 比如 3 4 5 6 前缀表达式的计算机求值 从右至左扫描表达式 遇到数字时 将数字压入堆栈 遇
  • shell 二维数组

    这次写脚本时用到了bash shell数组 当初做法是配置文件里面写成数组形式A element1 element2 element3 element4 然后一个脚本读取这个配置文件 于是稍微总结了一下数组的使用方法 Bash shell中
  • 3dsmax模型烘焙光照贴图并导入unity流程详解

    目录 前言 软件环境 前置知识储备 一 模型场景搭建 二 模型材质处理 三 vray渲染准备 四 烘焙至贴图 五 unity场景准备 六 贴图与材质 前言 该流程针对某些固定场景 模型发布 无法使用实时渲染引擎等 情况下的展示 本文记录烘焙
  • SQL Server2012如何更改服务器的名称

    一 事情起因 三层架构有个小问题 总是报各种错误 昨下午花费了半天时间准备把这个问题解决掉 未果 后来尝试了连接东哥的数据库 程序奇迹般的能运行了 东哥推测可能是我SQL Server 2012安装有问题 于是开始了尝试之旅 二 错误描述
  • 网络基础-传输层协议-TCP/UDP

    TCP UDP 谈一谈端口号 为什么会有端口号 端口号划分 一个进程可以bind多个端口号吗 一个端口号可以被多个进程bind吗 UDP 协议格式 udp协议的特点 无连接 不可靠 面向数据报 UDP缓冲区 TCP 协议格式 在这里插入图片
  • version `GLIBC_2.28‘ not found

    启动java jar包报错 报错内容主要是 version GLIBC 2 18 not found 产生原因 由于Linux系统的glibc版本太低 而软件编译时使用了较高版本的glibc引起的 查看glibc版本 这里链接的是2 17的
  • 红帽Red Hat Linux镜像下载

    红帽Red Hat Enterprise Linux镜像下载 官方网站链接 https developers redhat com products rhel download Download 链接 https pan baidu com
  • 梦幻模拟战更新服务器正在维护,《梦幻模拟战》二周年版本更新维护公告

    梦幻模拟战迎来二周年欢庆 海量更新内容即将解锁 新英雄罗泽希尔 克洛泰尔加入战斗 全新秘境限时活动开启 练兵场开放新兵种与科技 指挥官们 新的冒险已经来临 准备好接受挑战了吗 服务器预计将于8月20日1 00 8 00期间进行更新维护 在维
  • 6个非常有用的 CSS 资源网站

    作为一个 Web 设计师 精通 CSS 是绝对必要的而且对于 Web 开发也是必须的 良好的 CSS 编写习惯可以帮助你节省时间 并且能更好地进行网站的后期维护使得运行速度更快 从而节约带宽 下面是6个非常有用的 CSS 资源网站 包括 C
  • 常用bat

    1 net start XXX 用于启动系统服务 XXX 对应 系统服务中的对应的服务名称 启动mysql服务 net start MySQL 启动ORACLE服务 net start OracleServiceORCL net start
  • CRYSTAL-ubuntu-打工人使用手册-log

    个人笔记 将Mp4转换成gif sudo apt get install mplayer 将mp4分解成jpg存储到 img中 mplayer ao null result 2411 mp4 vo jpeg outdir img 将 img
  • Linux基础命令---显示进程树pstree

    pstree pstree显示正在运行的进程的树形结构 树以PID为根 如果省略了pid则以init为根 如果指定了用户名 则显示根植于该用户拥有的进程的所有进程树 如果pstree被调用为pstree x11 那么它将提示行尾的用户按RE
  • 区块链技术通俗讲解_要了解区块链一定要清楚区块链技术的几点技术原理

    关注 区链数科 让你从入门到精通区块链 其实 区块链并不是一个新型的技术 更多的应该是传统技术上的一个融合 再通过一定的规则和机制去实现了区块链独特性质 我们前面主要普及一些关于区块链的基本概念以及市场概况 今天来讲讲区块链的技术原理 希望
  • 使用pandas groupby的一个案例

    mongodb中有下面一组数据 业务场景就不介绍了 看数据应该很好理解 id 606fdd0805f5710008a82223 brand id 1 brand name APPLE series id 11 series name iPh
  • jdbc连接Microsoft SQL Server 2014

    前言 多年不用Microsoft SQL Server 简单回顾一下并记录一下在java中连接SQL Server的过程和注意事项 首先 从下载Driver开始 Microsoft JDBC Drivers 官方的下载地址为 适用于 SQL
  • 一些方便记忆的小例子

    epoll和select的小例子 先看一下epoll和select的区别 对于select来说 所有文件描述符都是在用户态被加入其文件描述符集合的 每次调用都需要将整个集合拷贝到内核态 epoll则将整个文件描述符集合维护在内核态 每次添加