深度剖析muduo网络库1.1---面试提问(阻塞、非阻塞、同步、异步)

在面试过程中,如果被问到关于IO的阻塞、非阻塞、同步、异步时,我们应该如何回答呢?

结合最近学习的课程,我作出了以下的总结,希望能与大家共同探讨!

先给出 陈硕大神原话:在处理IO的时候,阻塞和非阻塞都是同步IO,只有使用了特殊的API才是异步IO。

在这里插入图片描述

阻塞、非阻塞、同步、异步

对于一个典型的网络IO调用来说,阻塞、非阻塞、同步、异步都是在藐视IO的状态,而一个典型的IO调用,可以分为两个阶段:数据准备和数据读写。接下来拿recv()函数来谈这四个概念,

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

可以看出recv()函数需要传入的参数主要是sockfd,应用程序缓冲区buf以及buf的大小 。

首先我们来谈数据准备阶段。

数据准备分为阻塞和非阻塞:

阻塞:是指调用IO方法的线程进入阻塞状态,即sockfd工作在阻塞状态下,如果sockfd内核的tcp接收缓冲区中没有数据可读,recv就会阻塞当前的调用线程,直到有数据可读时返回。

非阻塞:如果sockfd工作在非阻塞模式状态下,是不会改变线程的状态,revc就会立即返回,我们可以通过返回值判断数据是否读入,例如返回值size大于0,表示实际读到数据的字节数;size==0,表示对方关闭了连接;size==-1&&errno=EAGAIN,size==-1表示出错,接着判断errno=EAGAIN或者EWOULDBLOCK表示socket设置为了非阻塞,连接成功但是没有数据,即数据未就绪,不会阻塞。

数据准备就绪以后,进入数据读写阶段

对于同步和异步,是分为IO同步异步以及业务逻辑层面的同步于异步,先来说说IO的同步与异步:

对于IO同步来说:应用程序需要自己将数据由内核缓冲区搬入buf里(不论是阻塞还是非阻塞),没有数据一直等待或者空转,这个期间应用程序不能执行其他事情;

对于IO异步来说:应用程序首先调用系统提供的异步IO接口,比如Linux平台下的aio_read、aio_write,将sockfd, buf以及通知方式(回调函数或者sigio信号通知)告知内核,由内核去将数据搬到buf,在这个期间应用程序可以去执行其他事情,内核将数据搬完后,内核就会按照事先约定的通知方式去通知应用程序,应用程序就可以直接开始处理数据。

注意::不论是阻塞还是非阻塞都是同步的,以及epoll一定是同步IO接口,因为epoll_wait(xxxxx,timeout),结束以后我们依旧要recv()。

再来说说业务逻辑层面的同步与异步,比如登录注册是同步实现还是异步实现:

同步:指的是A操作要调用B操作的API接口时,A操作一直等到B操作执行完后,得到返回值,然后才能继续向下处理。

异步:指的是A操作把自己感兴趣的事件以及通知方式告知于B,A继续执行自己的业务逻辑,等到B监听到相应事件后,再通知A去执行相应的处理逻辑。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于家政小程序的个性化家政服务研究

基于家政小程序的个性化家政服务研究,是近年来随着移动互联网技术的快速发展和人们生活品质的提高而兴起的一个热门话题。以下是对该领域的研究探讨: 一、引言 随着现代生活节奏的加快,家政服务已成为越来越多家庭不可或缺的一部分。然而&a…

最新优质电商API接口,附带教程【多语言环境高并发】

给大家更新一波24年一月份的新接口吧。 01 接口信息 线路推荐: 多仓: 1.春盈: https://wds.ecsxs.com/230989.json 2.无意: http://www.wya6.cn/tv/yc.json 3.主流电商平台API数据采集 单仓: 1.饭太硬: http:/…

CVE-2019-19945漏洞复现 Openwrt针对uhttpd漏洞利用

根据官方漏洞的文档,该漏洞的复现工作我会基于openwrt的18.06.4这个版本进行测试。我选取的环境是渗透测试常用的kali-Linux系统,然后在其中搭建docker环境来完成相应的实验环境的部署。我通过这个核心命令获取docker环境: sudo docker impo…

Sarcasm detection论文解析 |# 利用情感语义增强型多层次记忆网络进行讽刺检测

论文地址 论文地址:https://www.sciencedirect.com/science/article/abs/pii/S0925231220304689?via%3Dihub#/ 论文首页 笔记框架 利用情感语义增强型多层次记忆网络进行讽刺检测 📅出版年份:2020 📖出版期刊:Neurocomputing 📈影…

【微服务】服务保护(通过Sentinel解决雪崩问题)

Sentinel解决雪崩问题 雪崩问题服务保护方案服务降级保护 服务保护技术SentinelFallback服务熔断 雪崩问题 在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用,称为雪崩 原因 微服务之间的相互调用,服务提供者出现故障服务的消费者没有…

软件全套资料整理包获取-软件各阶段支撑文档

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

既能自动仿写公众号爆文,还能批量帮你上架闲鱼商品,打造自己的数字员工,简直yyds

「想象一下,如果有一个机器人在你的计算机上24小时不间断地工作,会不会做梦都笑着」 一、RPA机器人是什么? RPA——机器人流程自动化,它可以帮助人们完成重复性的、繁琐的工作,比如数据输入、网页爬取、自动化流程等…

The 2024 International Collegiate Programming Contest in Hubei Province, China

目录 H. Genshin Impact Startup Forbidden III K. Points on the Number Axis B 估计还会补D,I H. Genshin Impact Startup Forbidden III 对于一个有鱼的池塘,有周围与自己本身五个关键位置可以捕获当前位位置的鱼。把这些位置存储到 map中。用四进制…

2023 年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷 B(容器云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

【011】网上鲜花商店(SSM+JSP)

【011】网上鲜花商店(SSMJSP) 一、系统情况介绍 网上鲜花商店分为前台端和后台端,是致力于可以便捷购花而开发的一套系统,可以按照不同种类进行分类管理,清晰客观的展示鲜花的详情信息以及价格等等,适合新手学习开发…

Redis(基础指令和五大数据类型)

文章目录 1.基本介绍1.多种数据结构支持2.应用场景 2.Redis安装(直接安装到云服务器)1.安装gcc1.yum安装gcc2.查看gcc版本 2.将redis6.2.6上传到/opt目录下3.进入/opt目录下然后解压4.进入 redis-6.2.6目录5.编译并安装6.进入 /usr/local/bin 查看是否有…

多域名证书一个域名50元

多域名SSL数字证书是一种特殊的域名SSL证书,它可以同时保护多个不同的独立域名,对于域名网站比较多的个人和企事业开发者来说,为每个网站购买不同的SSL证书是一项不小的开销。因此,CA认证机构推出了两种SSL证书——通配符SSL证书和…

内网使用有道云翻译(安装离线包,支持翻译长句)

当我们使用有道云翻译时,为了在没网的情况下也能准确进行翻译,我们需要下载一些离线包增强翻译效果,但是我们在内网进行有道云安装时,他只提供了一个有道云的exe安装,并没有提供离线包的安装,我们这里实现在…

vue快速入门(五十五)插槽基本用法

注释很详细&#xff0c;直接上代码 上一篇 新增内容 当传输内容只有一种时的基础写法 源码 App.vue <template><div id"app"><h1>被淡化的背景内容</h1><my-dialog><!-- 插槽内容:文字以及dom结构都可以传 --><span>你确…

分布式锁与秒杀

分布式锁与秒杀 1. 分布式锁1.1 常用Redis分布式锁方案三&#xff1a;使用Lua脚本(包含SETNX EXPIRE两条指令) 秒杀 1. 分布式锁 https://www.cnblogs.com/shoshana-kong/p/17519673.html 1.1 常用Redis分布式锁方案三&#xff1a;使用Lua脚本(包含SETNX EXPIRE两条指令) …

Gradio的Dataframe数据显示不全,例如只能显示前15行数据

Gradio的Dataframe数据显示不全&#xff0c;例如只能显示前15行数据 ⚙️1.软件环境⚙️&#x1f50d;2.问题描述&#x1f50d;&#x1f421;3.解决方法&#x1f421;&#x1f914;4.结果预览&#x1f914; ⚙️1.软件环境⚙️ Windows10 教育版64位 Python 3.10.6 Chrome 版本…

RFC 791 (1)-导论

目录 浅论 IP是啥 IP可以管啥 操作 范例查看 提示&#xff1a;本系列将会开始RFC文档阅读&#xff0c;这里会给出我的一些笔记 浅论 我们这篇RFC文档描述的是IP和ICMP协议&#xff0c;我们都知道&#xff0c;在传统的OSI七层或者是现在被简化的五层&#xff1a;应用层&…

绘唐3工具怎么成为团长阿

绘唐3怎么成为团长阿 这里https://qvfbz6lhqnd.feishu.cn/wiki/D3YLwmIzmivZ7BkDij6coVcbn7W

统一大型语言模型和知识图谱:路线图

【摘要】 大型语言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT和GPT4&#xff0c;由于其涌现能力和泛化性&#xff0c;正在自然语言处理和人工智能领域掀起新的浪潮。然而&#xff0c;LLM是黑箱模型&#xff0c;通常无法捕捉和获取事实知识。相反&#xff0c;知识图…

图片如何转换成jpg?分享三种简单方法

在日常生活中&#xff0c;我们经常需要将照片转换为JPG格式以便于分享或者上传&#xff0c;然而&#xff0c;小伙伴不知道的是不同的设备和软件可能会有不同的默认保存格式。如果你发现你的照片不是jpg格式&#xff0c;那么如何将图片如何转换成jpg呢? 如果您有其他格式的图片…