一个通俗易懂的例子,带你彻底明白 同步异步,阻塞非阻塞

2024-05-28 09:44

本文主要是介绍一个通俗易懂的例子,带你彻底明白 同步异步,阻塞非阻塞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阻塞I/O(Blocking I/O)

例子:你亲自去仓库取书。

过程

  1. 你开车去仓库。
  2. 在路上花时间开车到仓库。
  3. 到了仓库后,排队等待拿到书。
  4. 拿到书后,开车回家。

在整个过程中,你自己(相当于程序)是完全被占用的,不能做其他事情。你必须等待所有步骤完成后,才能继续其他任务。

非阻塞I/O(Non-blocking I/O)

例子:你打电话给仓库,问有没有书,每隔一段时间打一次电话,直到书准备好了。

过程

  1. 你打电话问仓库有没有书。
  2. 仓库说还没有准备好,你挂掉电话,做其他事情。
  3. 每隔一段时间,你继续打电话询问,直到仓库说书准备好了。
  4. 你去仓库拿书。

在这个过程中,你可以做其他事情(相当于程序可以继续执行其他代码),每隔一段时间再检查一次是否书已经准备好。

同步I/O(Synchronous I/O)

例子:你需要等待仓库通知你书已经准备好,然后再去拿书。

过程

  1. 你向仓库发出请求,问有没有书。
  2. 仓库说会通知你,你挂掉电话,等待通知。
  3. 你收到仓库的通知(可能是电话或短信),说书已经准备好了。
  4. 你去仓库拿书。

在这个过程中,你的行动是按顺序进行的,你等待仓库的通知(相当于程序等待I/O操作完成)。

异步I/O(Asynchronous I/O)

例子:你向仓库发出请求,让他们送书到你家。

过程

  1. 你向仓库发出请求,让他们把书送到你家。
  2. 你继续做其他事情,不用等待。
  3. 仓库处理你的请求,准备书并派送到你家。
  4. 书送到你家,你收到书。

在这个过程中,你发出请求后可以立即做其他事情,仓库(相当于I/O设备)在后台处理你的请求,最后书自动送到你家(相当于I/O操作完成后通知程序)。

总结

  • 阻塞I/O:程序等待I/O操作完成,不能做其他事情。
  • 非阻塞I/O:程序发出I/O请求后,可以继续做其他事情,但需要不断检查I/O是否完成。
  • 同步I/O:程序等待I/O操作完成,按顺序执行任务。
  • 异步I/O:程序发出I/O请求后,立即继续做其他事情,I/O操作在后台完成,并在完成后通知程序。

这篇关于一个通俗易懂的例子,带你彻底明白 同步异步,阻塞非阻塞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010215

相关文章

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Java 中实现异步的多种方式

《Java中实现异步的多种方式》文章介绍了Java中实现异步处理的几种常见方式,每种方式都有其特点和适用场景,通过选择合适的异步处理方式,可以提高程序的性能和可维护性,感兴趣的朋友一起看看吧... 目录1. 线程池(ExecutorService)2. CompletableFuture3. ForkJoi

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C