Linux内核epoll

news2024/11/27 18:47:26

Linux网络IO模型

同步和异步,阻塞和非阻塞

Linux下的五种IO模型

同步和异步,阻塞和非阻塞
Linux 下的五种I/O模型:
阻塞IO(Blocking IO) BIO
非阻塞IO(No Blocking IO)
IO复用(select 、poll和epoll) NIO
信号驱动IO (signal driven IO)

异步IO(asynchronous IO) AIO

select
对一个socket,两次调用,两次返回,比阻塞IO并没有什么优越性;关键是能实现同时对多个socket进行处理。

阻塞IO模型
在这里插入图片描述

I/O 复用模型
在这里插入图片描述
IO 复用需要使用两个系统调用(select 和 recvfrom),而 blocking IO 只
调用了一个系统调用(recvfrom)。但是,用 select 的优势在于它可以同时处理多个 connection。
所以,如果处理的连接数不是很高的话,使用 select/epoll 的 web server 不一定比使用
multi-threading + blocking IO 的 web server 性能更好,可能延迟还更大。select/epoll 的优势
并不是对于单个连接能处理得更快,而是在于能处理更多的连接。

NIO对于BIO来说,有select多路复用器,能接收更多请求

从Linux代码结构看网络通信模式

在这里插入图片描述
在这里插入图片描述

Linux 下的 IO 复用编程

select,poll,epoll 都是 IO 多路复用的机制。I/O 多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但 select,poll,epoll 本质上都是同步 I/O,因为他们都需要在读写事件就绪后自己负责进行读写,并等待读写完成。

select 、poll、epoll比较

select、poll、epoll都是操作系统实现IO多路复用的机制

支持一个进程所能打开的最大连接数

模式
select单个进程所能打开的最大连接数有 FD_SETSIZE 宏定义,其大小是 32个整数的大小(在 32 位的机器上,大小就是 3232,同理 64 位机器上FD_SETSIZE 为 3264),当然我们可以对进行修改,然后重新编译内核,但是性能可能会受到影响。
pollpoll 本质上和 select 没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的
epoll虽然连接数基本上只受限于机器的内存大小

FD 剧增后带来的 IO 效率问题

模式
select因为每次调用时都会对连接进行线性遍历,所以随着 FD 的增加会造成遍历速度慢的“线性下降性能问题”。
poll同上
epoll因为 epoll 内核中实现是根据每个 fd 上的 callback 函数来实现的,只有活跃的 socket 才会主动调用 callback,所以在活跃 socket 较少的情况下,使用 epoll 没有前面两者的线性下降的性能问题,但是所有 socket 都很活跃的情况下,可能会有性能问题。

消息传递方式

模式
select内核需要将消息传递到用户空间,都需要内核拷贝动作
poll同上
epollepoll 通过内核和用户空间共享一块内存来实现的。

综上,在选择 select,poll,epoll 时要根据具体的使用场合以及这三种方式的自身特点。
1、表面上看 epoll 的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和 poll 的性能可能比 epoll 好,毕竟 epoll 的通知机制需要很多函数回调。
2、select 低效是因为每次它都需要轮询。但低效也是相对的,视情况而定,也可通过良好的设计改善。

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

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

相关文章

【录制,纯正人声】OBS录制软件,音频电流音,杂音解决办法,录制有噪声的解决办法

速度解决的方法 (1)用RNNoise去除噪声。RNNoise是一个开源的,效果不好的噪声去除器。使用方法就是点击滤镜,然后加噪声抑制RNNoise。【这方法不好用】 (2)用Krisp(https://krisp.ai/) 去除噪声。这个Kris…

2024年【起重机械指挥】考试及起重机械指挥新版试题

题库来源:安全生产模拟考试一点通公众号小程序 起重机械指挥考试考前必练!安全生产模拟考试一点通每个月更新起重机械指挥新版试题题目及答案!多做几遍,其实通过起重机械指挥试题及解析很简单。 1、【多选题】《中华人民共和国特…

Django框架中Ajax GET与POST请求的实战应用

系列文章目录 以下几篇侧重点为JavaScript内容0.0 JavaScript入门宝典:核心知识全攻略(上)JavaScript入门宝典:核心知识全攻略(下)Django框架中Ajax GET与POST请求的实战应用VSCode调试揭秘:L…

详解 Flink 的时间语义和 watermark

一、Flink 时间语义类型 Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事件时间戳Ingestion Time :是数据进入 Flink…

✔️Vue基础+

✔️Vue基础 文章目录 ✔️Vue基础computed methods watchcomputed计算属性methods计算属性computed计算属性 VS methods方法计算属性的完整写法 watch侦听器(监视器)watch侦听器 Vue生命周期Vue生命周期钩子 工程化开发和脚手架脚手架Vue CLI 项目目录介…

基于Python的北京天气数据可视化分析

项目用到库 import numpy as np import pandas as pd import datetime from pyecharts.charts import Line from pyecharts.charts import Boxplot from pyecharts.charts import Pie,Grid from pyecharts import options as opts from pyecharts.charts import Calendar 1.2…

【数据结构】栈的应用

目录 0 引言 1 栈在括号匹配中的应用 2 栈在表达式求值中的应用 2.1 算数表达式 2.2 中缀表达式转后缀表达式 2.3 后缀表达式求值 3 栈在递归中的应用 3.1 栈在函数调用中的作用 3.2 栈在函数调用中的工作原理 4 总结 0 引言 栈(Stack)是一…

Python001

Python 是一种高级编程语言。它具有以下显著特点:1. 简单易学:语法相对简洁明了,对初学者很友好。2. 丰富的库:拥有大量强大的内置库和第三方库,可用于各种领域,如数据分析、机器学习、Web 开发等。3. 可读…

Python应用开发——30天学习Streamlit Python包进行APP的构建(5)

上几次我们已经将一些必备的内容进行了快速的梳理,让我们掌握了streanlit的凯快速上手,接下来我们将其它的一些基础函数再做简单的梳理,以顺便回顾我们未来可能用到的更丰富的函数来实现应用的制作。 st.write_stream 将生成器、迭代器或类似流的序列串流到应用程序中。 …

【网络编程开发】8.TCP连接管理与UDP协议 9.IP协议与ethernet协议

8.TCP连接管理与UDP协议 三次握手 三次握手的过程在TCP/IP网络通信中起着至关重要的作用,它不仅确保了数据的可靠传输,还为两端的数据传输提供了稳定的连接初始化过程。这一过程涉及到几个关键步骤,每个步骤都有其特定的目的和功能。 步骤&…

你可以直接和数据库对话了!DB-GPT 用LLM定义数据库下一代交互方式,数据库领域的GPT、开启数据3.0 时代

✨点击这里✨:🚀原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) 你可以直接和数据库对话了!DB-GPT 用LLM定义数据库下一代交互方式,数据库领…

前端开发高频面试题

好的,以下是对您提出的问题的详细回答: 说说vue动态权限绑定渲染列表(权限列表渲染) Vue中动态权限绑定渲染列表通常涉及以下步骤: 首先,通过API请求从服务器获取当前用户的权限数据。在Vue组件中&#xff…

Excel 生成所在月份的每一天列表

Excel 的 A2 格是日期 A1Fecha201/03/24 需要生成该日期所在月份的每一天的列表 A1WholeMonth201/03/24302/03/24403/03/24504/03/24605/03/24706/03/24807/03/24908/03/241009/03/241110/03/241211/03/241312/03/241413/03/241514/03/241615/03/241716/03/241817/03/241918…

【稳定检索/投稿优惠】2024年智慧金融与财务管理国际会议(SFFM 2024)

2024 International Conference on Smart Finance and Financial Management 2024年智慧金融与财务管理国际会议 【会议信息】 会议简称:SFFM 2024 截稿时间:以官网为准 大会地点:中国广州 会议官网:www.iacsffm.com 会议邮箱&am…

【python】OpenCV—Cartoonify and Portray

参考来自 使用PythonOpenCV将照片变成卡通照片 文章目录 1 卡通化codecv2.medianBlurcv2.adaptiveThresholdcv2.kmeanscv2.bilateralFilter 2 肖像画cv2.divide 1 卡通化 code import cv2 import numpy as npdef edge_mask(img, line_size, blur_value):gray cv2.cvtColor(…

idea2023如何创建普通maven工程项目

解决 1.创建新项目 1.进入创建项目 File -> new -> project 2,project 中有 build system 选择maven 2.在已有项目中创建普通maven工程 1.右键项目选择 new -> Module 2.选择 new Module 其实与新建maven工程没什么区别 em:问题 idea以前的版本是在Mav…

【一百一十】【算法分析与设计】[SDOI2009] HH的项链,树状数组应用,查询区间的种类数,树状数组查询区间种类数

P1972 [SDOI2009] HH的项链 [SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此&am…

第十二届蓝桥杯C++青少年组中/高级组选拔赛2020年11月22日真题解析

一、编程题 第1题&#xff1a;求和 【题目描述】 输入一个正整数 N(N < 100)&#xff0c;输出 1 到 N(包含 1 和 N)之间所有奇数的和。 【输入描述】 输入一个正整数 N(N < 100) 【输出描述】 输出 1 到 N 之间的所有奇数的和 【输入样例】 3【输出样例】 4答案&…

Llama模型家族之拒绝抽样(Rejection Sampling)(九) 强化学习之Rejection Sampling

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

利用streamlit结合langchain_aws实现claud3的页面交互

测试使用的代码如下 import streamlit as st from langchain_aws import ChatBedrockdef chat_with_model(prompt, model_id):llm ChatBedrock(credentials_profile_name"default", model_idmodel_id, region_name"us-east-1")res llm.invoke(prompt)re…