epoll为什么比select和poll效率更高

基于 select 和 poll 方法的程序中,因为大量操作的消耗与当前连接数 n 成线性相关,从而导致单个任务的资源消耗和当前任务的关系是 O(n)。所以随着连接数目增大,积累起来的资源消耗很大,结果就是系统吞吐量和机器性能不匹配。为了解决该问题,进而发展出了 epoll、kqueue 和 /dev/poll 这三套利器。epoll 已经成为处理并发、高性能的代表。它们的工作原理:

一是避免了每次调用 select 或 poll 时内核用于分析参数建立事件等待结构的开销,取而代之的是维护一个长期的事件关注表,应用程序通过句柄修改这个列表和捕获 I/O 事件;

二是避免了 select 或 poll 返回后,应用程序扫描整个句柄表的开销,取而代之的是直接返回具体的事件列表;

通过以上方法,彻底摆脱了具体操作的消耗与当前连接数 n 的线性关系,极大地提高了服务器处理能力。


关于 epoll 和其他方法的使用参见我的其他博客,有问题和疑问可以给我邮件或者评论哦~:-D

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 系统使用USB OTG功能/打开USB Host API功能

步骤一:确定 Android 设备是否支持 USB Host 功能,具体可以通过以下步骤进行确认: 1. 查看手机或平板设备参数,或者直接联系厂家咨询; 2. 使用 UsbHostDiagnostics.APK 安卓应用软件直接进行检测,汉化版软件…

Android开发之Handler

Handler 定义与作用 主要接受子线程发送的数据, 并用此数据配合主线程更新UI。 解释:当应用程序启动时,Android 首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进行事件分…

Android日志Log使用

Android开发中日志工具的使用是十分重要的,可以帮助我们定位和查找程序执行的问题,了解程序执行过程等。这里以 Eclipse 下的的安卓开发为例进行说明。 打开 LogCat 功能 首先,确保 Eclipse 软件中已经打开了日志工具 LogCat 功能&#xff…

Android项目目录结构

在 Eclipse 中新建或者打开一个 Android 项目,可以看到目录视图如下所示: 其实项目开发中,使用频率较高的并不多,我们只要了解清楚不同类型的文件和不同目录的对应关系就可以了。 1. src src 目录用于存放 Java 代码&#xff0…

Libusb开发教程二 API介绍与使用

背景介绍 上一篇博文主要介绍了 Libusb 在 Linux 系统下的详细安装过程,除了 libusb-1.0.9.tar.bz2 离线包之外,还安装了 libusb-compat-0.1.4.tar.bz2。顾名思义,第二个是先前版本的兼容包,因此在使用过程中,开发者就…

tty,串口,控制台与驱动程序

tty 设备的名称是从过去的电传打字机缩写而来,最初是指链接到 Unix 系统上的物理或者虚拟终端。随着时间的推移,当通过串行口能够建立起终端连接后,这个名字也用来指任何的串口设备。物理 tty 设备的例子有串口、USB 到串口的转换器&#xff…

Linux 串口编程一 一些背景

在大部分讲解 Linux 编程书籍的时候会发现没有单独的串口编程章节,实际上串口编程已经被概括在了“终端”或者“终端IO”章节里面。在上一篇博客中对经常出现的几个容易混淆的概念进行简单描述:tty,串口,控制台与驱动程序。后面会…

Linux 终端概述与分类

该博文已经迁移到其他博客,参见: Linux 终端IO概念与背景介绍

Linux tty驱动程序一 架构

tty 核心概览如下图所示: 可以看到,tty 架构的划分层次,由下至上的逻辑关系为:硬件 -> tty 驱动 -> tty 线路规程(也译为行规程)-> tty 核心 -> 用户层。 内核负责控制 tty 设备的数据流&…

Linux 串口编程二 深入了解 termios

前言 这一系列串口编程重点在应用层编程,但是在讲解原理与相关概念时需要对驱动框架有个基础的认识。如果只是浅尝辄止,以后在遇到串口驱动与应用层程序调试难免遇到瓶颈。关于 tty驱动架构参见我的其他博客:Linux tty驱动程序架构。有时了解…

Libusb开发教程三 USB设备程序开发

首先,需要指出本篇博客的基础仍然是基于 libusb V1.0 以下。主要考虑到保持与之前博客的连贯性,在上一篇博客中介绍了老版本中可以被调用的 API 以及功能介绍,对于库中 API 接口函数的使用相信读者会一目了然,不需要刻意记忆&…

Linux 串口编程三 使用termios与API进行串口程序开发

在 termios 结构体以及内部终端控制标志中,并非所有的参数对于实际的物理串口都是有效的,在使用过程中也不需要对于所有标志的作用都有所理解。事实上,快速掌握一项技术的核心点也是一种学习能力。对于使用,熟悉并掌握操作框架十分…

Linux 串口编程四 串口设备程序开发

Linux 串口编程和程序相对来说是很简单的,之所以用博客连载来展示,主要是想在学会使用的基础上掌握相关背景,原理以及注意事项。相信在遇到问题的时候,我们就不会对于技术的概念和 API 的使用浅尝辄止了。下面进入具体应用案例&am…

POSIX 串口编程指南

介绍 POSIX 串口编程指南将教会你在你的 UNIX 工作站或者 PC 上面如何成功、有效以及可移植性的对串口编程。每一章提供了使用 POSIX 终端控制函数的编程例程,可以基本不经修改地工作在 IRIX, HP-UX, SunOS, Solaris, Digital UNIX, Linux 以及其他大多数 UNIX 操作…

串口流控

流控作用 这里讲到的“流”,指的是数据流。数据在两个串口之间传输时,当通讯双方速率不匹配时,常常会出现丢失数据的现象。如台式机与单片机之间的通讯,若接收端数据缓冲区已满,继续发送来的数据就会丢失。在早期网络…

电容的分类及作用

旁路 旁路电容是为本地器件提供能量的储能器件,它能使稳压器的输出均匀化,降低负载需求。就像小型可充电电池一样,旁路电容能够被充电,并向器件进行放电。为尽量减少阻抗,旁路电容要尽量靠近负载器件的供电电源管脚和…

快速解决 Android SDK Manager 无法下载或者下载速度慢

在这里以 Windows 下的 Android SDK Manager 为例,其他系统下与此类似,只会存在部分工具栏名称不同的情况,不明之处可以追问。下面就进入具体配置流程: 1. 选择 Tools->Options 进入代理设置。 代理设置选项,在 H…

安卓之USB主机(Host)与配件(Accessory)模式

安卓设备与USB硬件通讯时有两种模式可以选择:USB Host 模式与 USB Accessory 模式。从 USB 逻辑角色来说,USB Host 模式是指安卓设备作为 USB 主机,所有活动均由安卓设备发起;USB Accessory 模式是指安卓设备作为 USB 设备&#x…

安卓USB开发教程 一 USB Host 与 Accessory

安卓通过两种模式:USB Accessory 与 USB Host 模式支持多种 USB 外设与安卓 USB 配件(实现安卓配件协议的硬件)。在 USB 配件模式下,外部 USB 硬件充当 USB 主机。配件实例可能包含机器人控制器、扩展坞、诊断和音乐设备、售货亭、…

安卓USB开发教程 二 USB Host

USB Host(主机模式) 当 Android 设备处于 USB 主机模式时,它充当 USB 主机,为总线供电,并枚举连接的 USB 设备。Android 3.1 及更高版本支持 USB 主机模式。 API 概述 在开始之前,理解需要使用的类是很重…