再谈select, iocp, epoll,kqueue及各种I/O复用机制

2023-10-30

上篇文章太过幼稚,一派胡言,希望没有误导大家。。我也是菜鸟,学习本身就是一个不断追求真理的过程,希望能谅解:)首先感谢kasicass GG指出错误(已经指导我很多次了,非常感谢~~),然后我又查阅了一些资料,再次整理,more seriously and detailedly~

首先,介绍几种常见的I/O模型及其区别,如下:

  • blocking I/O

  • nonblocking I/O

  • I/O multiplexing (select and poll)

  • signal driven I/O (SIGIO)

  • asynchronous I/O (the POSIX aio_functions)

blocking I/O
这个不用多解释吧,阻塞套接字。下图是它调用过程的图示:

重点解释下上图,下面例子都会讲到。首先application调用 recvfrom()转入kernel,注意kernel有2个过程,wait for data和copy data from kernel to user。直到最后copy complete后,recvfrom()才返回。此过程一直是阻塞的。

nonblocking I/O:
与blocking I/O对立的&

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

再谈select, iocp, epoll,kqueue及各种I/O复用机制 的相关文章

  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何在线程创建和退出时调用函数?

    include
  • 由于图形处理单元配置,不支持 Windows Phone 模拟器(Mac 上的 Windows 7)

    启动 Windows Phone 模拟器时出现错误 不支持 Windows Phone 模拟器 因为您的计算机没有所需的图形处理单元配置 如果没有图形处理单元 XNA 框架页面将无法运行 您想继续启动模拟器吗 当我尝试访问网页 任何网页 时
  • future::select 之间有什么区别!和东京::选择?

    我正在使用 Tokio 我想接收来自两个不同的请求mpsc队列 select 似乎是要走的路 但我不确定两者之间有什么区别futures select and tokio select 在什么情况下应该使用其中一种而不是另一种 tokio
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • 小程序中的实时日志,直接在微信公众号可以看到数据

    前言 小程序中的实时日志 直接在微信公众号可以看到数据 具体操作 注意 小程序实时日志每天的条数就大为100w条 1 封装的log js方法 放到utils里面 var log wx getRealtimeLogManager wx get
  • 云环境部署django+uwsgi 生产环境

    准备条件 1 确保有一个能够用runserver正常启动的django项目 2 项目已上传到linux 3 linux上已部署好python环境 且已安装好项目所需的模块 安装uwsgi pip3 install uwsgi 基于uwsgi
  • 【Java】构造器(构造方法)是否可以被重写?

    1 前言 首先 构造器是不能被继承的 因为每个类的类名都不相同 而构造器名称与类名相同 所以根本谈不上继承 又由于构造器不能继承 所以就不能被重写 但是 在同一个类中 构造器是可以被重载的 其实 在之前的一篇博客中 我已经记录了重载和重写的
  • REGEXP_SUBSTR函数,感觉像行专列

    REGEXP SUBSTR函数格式如下 function REGEXP SUBSTR String pattern position occurrence modifier srcstr 需要进行正则处理的字符串 pattern 进行匹配的
  • TP5.1使用JWT进行Token令牌生成与验证

    传统互联网项目在实现保持登录状态 退出登录 接口请求等功能时会使用Session 但是众所周知Session数据在产生后会存储与服务器端 所以当用户量达到一定程度会相应影响到服务器的性能 且Session在前后端分离的项目中或是多服务器项目
  • http 服务器是否找到文件路径,服务器接受文件,存储以及路径设置(虚拟路径)(添加如何通过http访问这个文件)...

    在一个实际项目中 总是不可避免的需要向服务器上传文件 对于大多数的文件存储 我们一般是将文件的路径存入数据库 通过路径获得文件 这里有两种方法 一种是存在webcontent中 一种是存入主机的硬盘中 从长远的角度来看 我个人比较赞成存在主
  • python思考题实验题整理

    思考题实验题整理 第2章 思考题 下列哪些是合法的变量名 A 6a2b aBc abc 123 ab 123 hello world 合法 A aBc ab 123 思考题 TempConvert 1 py 让用户输入摄氏度C 输入对应的华
  • Unity3d--牧师与魔鬼

    一 游戏基本规则 Priests and Devils Priests and Devils is a puzzle game in which you will help the Priests and Devils to cross t
  • 教你用Appium搭建Android自动化测试框架(详细教程)

    如题 本文附有仓库地址以及代码 目录如下 1 下载安装appium 2 配置并使用appium 3 配置工程 一 下载安装appium 下载appium desktop的mac版本 我选择用1 17 1版本 最新的版本1 22 0 拆分一个
  • C语言与堆栈的理解

    C语言和堆栈的联系 C语言和栈 必须要先给C语言分配一个可用的栈空间 C语言才能运行 因为C语言里的临时变量都是放在栈空间里的 没有栈C语言是无法运行的 C语言和堆 堆空间就是我们申请的内存空间 用malloc函数申请的 C语言中当想要使用
  • 计算x的n次方(用函数)

    use MathJax to parse formulas Description 问题很简单 求x n 请编写pow 函数 声明如下 int pow int x int n int p pow的功能是实现x n 最后 个参数p没有用 系统
  • 全国计算机等级考试二级教程--python语言程序设计(2018年版)第二章:PYthon语言基本语法元素

    声明 本篇文章只是个人知识盲区 知识弱点 重点部分的归纳总结 望各位大佬不喜勿喷 梳理顺序是按照书籍的实际顺序梳理 转载请注明出处 作者 sumjess 一 程序的格式框架 1 缩进 缩进指每行语句开始前的空白区域 用来表示python程序
  • PE文件资源解析(十一)对话框资源的解析

    对话框资源 在这里指的是资源类型为RT DIALOG的资源信息 通过ResHacker看到的效果图如下 待续
  • 人脸表情数据集及其处理

    JAFFE数据集 1998年发布 这是比较小和老的数据库 该数据库是由10位日本女性在实验环境下根据指示做出各种表情 再由照相机拍摄获取的人脸表情图像 整个数据库一共有213张图像 10个人 全部都是女性 每个人做出7种表情 这7种表情分别
  • angular2使用Http服务

    当你需要使用Http的时候 需要在你的模块中导入HttpModal 否则会出现Http没有工厂错误 import NgModule from angular core import HttpModule from angular http
  • Android NDK开发——Android studio使用JNI调用OpenCV处理图像

    前言 这里要演示的是使用Android studio 做APP开发 使用JNI与C 交互的demo 一 创建工程 1 创建一个Native C 工程 2 命令工程和指定交互语言 3 指定C 语法版本 4 创建完成之后打开cpp目录下的CMa
  • 心电图心跳信号多分类预测(一)

    目录 1 赛题理解 1 1赛题概况 1 2数据概况 1 3代码示例 1 3 1数据读取 1 3 2分类指标计算示例 2 baseline 2 1 导入第三方包 2 2 读取数据 2 3 数据预处理 2 4 训练数据 测试数据准备 2 5 模
  • gitLab配置ssh实现私钥访问

    1 配置ssh文件 1 cd C Users 用户名 ssh 找到文件夹 删除 ssh 里面所有其他文件方面我们配置要最新的 2 win r cmd 呼出命令行 ssh keygen t rsa C 必须对应gitLab用户名 3 生成文件
  • 如何理解委托

    以前一直没弄懂委托到底有什么用 为什么要用 今天小小总结了一下 如下 总结 delegate 1 委托的定义 1 就是一个类 他定义了方法的类型 2 public delegate void 自定义类型 类型 变量 当然还有匿名委托dele
  • 再谈select, iocp, epoll,kqueue及各种I/O复用机制

    上篇文章太过幼稚 一派胡言 希望没有误导大家 我也是菜鸟 学习本身就是一个不断追求真理的过程 希望能谅解 首先感谢kasicass GG指出错误 已经指导我很多次了 非常感谢 然后我又查阅了一些资料 再次整理 more seriously