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

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

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

macOS彻底卸载Python的超完整指南(推荐!)

《macOS彻底卸载Python的超完整指南(推荐!)》随着python解释器的不断更新升级和项目开发需要,有时候会需要升级或者降级系统中的python的版本,系统中留存的Pytho版本如果没有卸载干... 目录MACOS 彻底卸载 python 的完整指南重要警告卸载前检查卸载方法(按安装方式)1. 卸载

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应