Linux-计算机网络-探索epoll是同步阻塞的还是异步非阻塞的

一.同步与非同步

1.同步与非同步介绍

在计算机网络中,同步通信是收发双方按照同一时钟节拍工作,数据传输有严格的时序;非同步通信则没有统一时钟,发送方可以随时发送数据,接收方要根据起始位等信息来接收并处理数据。

2.优劣势分析

(1)异步式同步(简称异步)。异步数据传输不需要在收发两端间传输时钟信号,所以实现起来比较简单;但是传输效率较低(适用于低速数据传输系统)

(2)同步式同步(简称同步)。同步数据传输的传输效率高(适合于高速数据传输系统)收发双方需要建立同步时钟,实现和控制比较复杂。

二.阻塞与非阻塞

1.阻塞与非阻塞介绍

在计算机网络中,阻塞是指调用的进程或线程在等待某个操作(如数据接收或发送)完成期间被挂起,不能执行其他操作。非阻塞是指进程或线程在执行网络操作时,不管操作是否完成,都不会被挂起,可以去执行其他任务。

2.优劣势分析

阻塞的优点
(1) 易于编程 — 阻塞 socket 很易于编程。所有的用户代码都在一个地方,并且顺序排列。
(2) 跨平台 — 由于 Unix 使用阻塞 socket,便携式代码很好写。Indy 依靠这个事实来实现 它的单源代码跨平台能力。其他跨平台的 socket 组件通过内部使用阻塞调用来模拟非 阻塞行为。
(3) 多线程工作良好 — 由于阻塞 socket 的使用按照自然顺序,他们是可继承的封装,因 此很适合多线程。
(4) 不依赖消息 — 非阻塞 socket 依赖于 window 信息系统。当在多线程中使用时,分别的 信息序列要被创建。当不在多线程中使用时,处理多链接时很容易发生瓶颈情况。

阻塞的缺点
客户端用户界面"冻结" — 阻塞 socket 调用后直到完成任务才会返回。当这调用发生在应用 的主线程中时,主线程无法处理用户界面消息。这导致用户界面的"冻结"。冻结的发生是由 于直到阻塞 socket 调用返回控制应用程序的句柄前,更新,重绘和其他消息都无法被处理。

非阻塞的优点
(1) 客户端无用户界面"冻结" — 因为用户代码响应事件,Windows 在 socket 事件间拥有 控制权。因此,Windows 也可以答复其他 Windows 消息。
(2) 可以不用多线程的多任务 — 单线程可以处理许多 socket。
(3) 许多 socket 是轻量级的 — 因为许多 socket 可以被处理而不需要多线程,内存和 CPU 的占用通常很少。

非阻塞的缺点
编程更难 — 非阻塞要求使用轮询或者事件。由于轮询很没效率,事件更常用。使用事件要 求用户代码分成许多子过程因此需要状态追踪。这导致代码易于出 bug 并且难以维护。

三.分析epoll是同步阻塞的还是异步非阻塞的


- epoll采用事件驱动的方式。当有事件(如可读、可写事件)发生在被监控的文件描述符上时,内核会通过事件通知机制告知应用程序。应用程序在收到通知之前可以做其他事情,而不是像同步方式那样一直等待I/O操作完成。例如,一个服务器程序使用epoll监听多个客户端套接字,当某个客户端有数据可读时,内核会通知服务器程序,而服务器程序在没有收到通知时可以处理其他事务,比如进行数据的缓存清理或者其他客户端的请求预处理等。
 - epoll可以和非阻塞I/O一起使用。在非阻塞模式下,当对文件描述符进行操作(如读取或写入)时,如果操作不能立即完成(例如没有数据可读或者缓冲区已满无法写入),函数不会阻塞等待,而是返回一个错误码(如EAGAIN或EWOULDBLOCK)。结合epoll,程序可以根据这个返回值决定是等待下一次事件通知还是进行其他操作。例如,在一个网络应用中,当使用epoll检测到一个套接字可写,但在实际写入时发现缓冲区已满,由于套接字是非阻塞的,写入操作不会阻塞,程序可以等待下一次可写事件通知,在此期间可以处理其他事件。

所以epoll是异步非阻塞

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

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

相关文章

Python第六次作业

01.求第n项的斐波那契数列值 #求第n项的斐波那契数列值 #1、1、2、3、5、8、13、21、34…… #F(0)0,F(1)1, F(n)F(n - 1)F(n - 2)(n ≥ 2,n ∈ N*)def shulie ():print("求第n项的斐波那契数列值:",end"")xev…

Vue3 学习笔记(十三)Vue组件详解

1、组件(Component) 介绍 组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,封装可重用的代码,可以帮助你将用户界面拆分成独立和可复用的部分。 每个 Vue 组件都是一个独立的 Vue 实…

MySQL基础(二)

目录 一. 数据库命令行基本操作指令 1. 查看当前有哪些数据库——show databases; 2. 创建数据库——create database 数据库名 charset utf8 3. 选中数据库——use 数据库名; 4. 删除数据库——drop database 数据库名; 二. 常用数据类型 2.1 数值类型 2.2. 字符串类型 …

详细解读 CVPR2024:VideoBooth: Diffusion-based Video Generation with Image Prompts

Diffusion Models专栏文章汇总:入门与实战 前言:今天是程序员节,先祝大家节日快乐!文本驱动的视频生成正在迅速取得进展。然而,仅仅使用文本提示并不足以准确反映用户意图,特别是对于定制内容的创建。个性化图片领域已经非常成功了,但是在视频个性化领域才刚刚起步,这篇…

深度学习案例:带有一个隐藏层的平面数据分类

该案例来自吴恩达深度学习系列课程一《神经网络和深度学习》第三周编程作业,作业内容是设计带有一个隐藏层的平面数据分类。作业提供的资料包括测试实例(testCases.py)和任务功能包(planar_utils.py),下载请…

SD教程 重绘 ControlNet-Inpain

SD教程 重绘 ControlNet-Inpain ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/A1353192296/article/details/13…

【界面改版】JimuReport 积木报表 v1.9.0 版本发布,填报能力和大屏能力

项目介绍 积木报表JimuReport,是一款免费的数据可视化报表,含报表、仪表盘和大屏设计,像搭建积木一样完全在线设计!功能涵盖:数据报表、打印设计、图表报表、门户设计、大屏设计等! Web版报表设计器&#x…

【网络】1.UDP通信

UDP通信 1 server1.1 server建立的步骤1.2 运行server 2 client2.1 client的建立步骤2.2 运行client 3 总结3.1 server3.2 client 1 server server的启动方式是:./udpserver 8080 --> 格式就是./proc port端口 port端口自己指定 1.1 server建立的步骤 获取文件描…

告别冰冷机器声:GLM-4-Voice开启情感语音交互新时代!

目录 引言一、GLM-4-Voice概述二、GLM-4-Voice的架构三、GLM-4-Voice的主要功能四、GLM-4-Voice的技术原理五、GLM-4-Voice的应用场景六、GLM-4-Voice体验快速开始结语 引言 在人工智能的不断进步中,语音交互技术正逐渐成为人机沟通的重要桥梁。它不仅极大地提升了…

MySQL定时异机备份

场景:将A机器MySQL数据库部分表每日定时备份到B机器上 (只适用于Linux) 实现方式算是比简单了,就是用mysqldump生成文件,使用scp命令传输到另一台机器上。 1. 编写备份shell脚本 在A机器新建脚本 (当然没有vim的话vi…

使用VS2019将C#代码生成DLL文件在Unity3D里面使用(一)

系列文章目录 untiy知识点 文章目录 系列文章目录👉前言👉一、首先你要先有VS👉二、引用UnityAPI使用步骤👉2-1.引用unitydll文件到项目里面👉2-2.导入Dll文件 👉三、编辑dll代码👉四、导出dll…

平台化运营公司如何在创业市场招商

在当今商业环境中,平台化运营的公司正成为推动经济发展的重要力量。对于这类公司而言,在创业市场招商意义重大。 平台化运营公司具有独特特点:通过搭建开放共享平台连接供需双方,实现资源优化配置与价值创造。比如电子商务平台、社…

聚类分析算法——K-means聚类 详解

K-means 聚类是一种常用的基于距离的聚类算法,旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面,我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…

SpringMVC执行流程(视图阶段JSP、前后端分离阶段)、面试题

目录 1.SpringMVC执行流程分为以下两种 2.非前后端分离的SpringMVC的执行流程 3.前后端分离的项目SpringMVC执行流程 4. 面试题 1.SpringMVC执行流程分为以下两种 2.非前后端分离的SpringMVC的执行流程 流程图: 更加生动的描述: DisPatcherServlet…

十分钟Linux中的epoll机制

epoll机制 epoll是Linux内核提供的一种高效I/O事件通知机制,用于处理大量文件描述符的I/O操作。它适合高并发场景,如网络服务器、实时数据处理等,是select和poll的高效替代方案。 1. epoll的工作原理 epoll通过内核中的事件通知接口和文件…

GRE Over IPsec(华三)

GRE Over IPsec 顾名思义,GRE在内,IPsec在外 那么当数据进入tunnel隧道后,会先被GRE封装后再进行IPsec感兴趣流acl匹配,匹配上了则封装IPsec,没匹配上则丢包 实验: 需求:总部pc能够通过gre o…

echarts属性之xAxis

xAxis 直角坐标系 grid 中的 x 轴,一般情况下单个 grid 组件最多只能放上下两个 x 轴,多于两个 x 轴需要通过配置 offset 属性防止同个位置多个 x 轴的重叠。 所有属性 xAxis. id string 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引…

盘点:2024年最新热门项目管理平台TOP11

一、项目管理平台的重要性 在当今竞争激烈的商业环境中,项目管理平台已成为企业提高效率和团队协作的关键工具。这主要是因为现代商业项目日益复杂,涉及多个部门、众多资源以及不断变化的需求。 首先,项目管理平台能够提高工作效率。例如&a…

PHP数据类型

几种常用的数据类型: String(字符串) Integer(整型) Float(浮点型) Boolean(布尔型) NULL(空值) Array(数组) Obje…

【大数据】Flink + Kafka 实现通用流式数据处理详解

目录 一、前言 二、流式数据处理场景介绍 2.1 流式数据处理概述 2.1.1 流式数据处理场景介绍 2.2 流式数据处理技术栈 2.2.1 数据采集 2.2.2 数据处理 2.2.3 数据存储 2.2.4 数据展示 2.3 流式数据处理场景面临的问题和挑战 三、通用的流式数据处理场景解决方案 3.1…