目录

一、同步与非同步

二、阻塞与非阻塞

三、BIO(Blocking I/O,阻塞I/O)

四、NIO(Non-blocking I/O,非阻塞I/O)

五、AIO(Asynchronous I/O,异步I/O)


同步阻塞:烧水一直站旁边等到水开

同步非阻塞:烧上水后去做其他事,时不时去看一看水开没开

异步非阻塞:烧上水后去做其他事,直到听见水开的声音

一、同步与非同步

  • 同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
  • 异步:异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。

二、阻塞与非阻塞

  • 阻塞:阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。
  • 非阻塞:非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。

三、BIO(Blocking I/O,阻塞I/O)

传统的 I/O 模型,所有操作都是阻塞的。当一个线程执行 I/O 操作(如读取数据)时,会一直阻塞直到数据准备完成或操作结束,期间无法进行其他任务。

通常采用一连接一线程的模式,即每个客户端连接都需要一个独立的线程来处理。

  • 优点:实现简单,易于理解和编码。
  • 缺点:资源消耗大,当并发量高时,会创建大量线程,导致系统开销剧增, scalability(可扩展性)差。
  • 适用场景:并发量小、连接数少且固定的场景,如简单的本地文件操作或低并发的网络应用。

四、NIO(Non-blocking I/O,非阻塞I/O)

基于缓冲区(Buffer)、通道(Channel)和选择器(Selector)实现,操作是非阻塞的。线程在进行 I/O 操作时,如果数据未准备好,不会一直等待,而是可以去处理其他任务,稍后再检查操作是否完成。

采用多路复用模式,一个选择器可以监控多个通道的 I/O 事件(如连接请求、数据可读等),一个线程可以处理多个客户端连接。

  • 优点:减少了线程数量,降低了系统资源消耗,提高了并发处理能力。
  • 缺点:编程复杂度较高,需要处理缓冲区、通道和选择器之间的交互。
  • 适用场景:高并发、I/O 密集型的场景,如服务器端的网络通信(如 Nginx 部分采用了类似 NIO 的思想)。

五、AIO(Asynchronous I/O,异步I/O)

完全异步的 I/O 模型,操作发起后,线程无需等待操作完成,而是继续执行其他任务,当 I/O 操作完成后,系统会通知线程(通过回调函数等方式)处理结果。

基于回调机制,当应用程序发起 I/O 操作后,内核会在操作完成后主动通知应用程序。

  • 优点:进一步提升了系统的并发处理能力,线程利用率更高,无需像 NIO 那样主动轮询检查操作状态。
  • 缺点:实现和理解难度较大,在一些场景下可能存在回调嵌套过深的问题。
  • 适用场景:对响应时间要求高、并发量极大的场景,如高性能的服务器端应用、大数据处理等。

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

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

相关文章

电脑无法识别固态硬盘怎么办?

随着固态硬盘(SSD)越来越普及,不少用户在给电脑更换、加装SSD时会遇到一个让人头大的问题——电脑识别不了固态硬盘。可能是开不了机,或者在“此电脑”中找不到硬盘,甚至连系统安装界面都提示“找不到驱动器”。这时候…

Kingbasepostgis 安装实践

文章目录前言一、安装准备1.1 部署方案规划1.2 SELINUX、防火墙状态检查1.3 操作系统时间检查1.4 创建用户及密码1.5 目录创建1.6 操作系统参数配置1.6.1 配置limits.conf文件二、安装2.1 上传安装包以及license授权文件2.2 拷贝安装文件2.3 命令行方式安装2.3.1简介2.3.2 许可…

移动端设备能部署的llm

mlc-llm 内置RedPajama hf示例模型 TheBloke/Mistral-7B-Instruct-v0.2-GGUF https://github.com/mlc-ai/mlc-llm/tree/main llama.cpp https://github.com/ggml-org/llama.cpp reference --- MLC-LLM:大模型如何部署到浏览器 / 手机?完整流程复现…

Ubuntu硬盘挂载

一、在 Ubuntu 中,你可以用以下命令快速查看 所有已连接但尚未挂载的硬盘和分区:lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID输出中 MOUNTPOINT 为空的行,就是 未挂载的分区。sda ├─sda1 500M ext4 /boot ├─sda2 1.8T ntfs └─sda3 …

JavaScript -Socket5代理使用

axios 安装两个包 socks-proxy-agent,axios const { SocksProxyAgent } require(socks-proxy-agent); const axios require(axios);const socks5Axios axios.create();const socks5 () > {const socks5Agent new SocksProxyAgent("socks5://112.194.8…

[特殊字符] 从数据库无法访问到成功修复崩溃表:一次 MySQL 故障排查实录

一次典型的 MySQL 故障排查与修复全过程,涵盖登录失败、表崩溃、innodb_force_recovery 救援、坏表剔除与数据恢复等关键操作。一、问题背景某业务系统运行多年,数据库使用的是 MySQL 8.0.18,近期在一次服务器重启后,发现无法正常…

【Agent】API Reference Manual(API 参考手册)

https://github.com/Intelligent-Internet/CommonGround/blob/main/docs/framework/03-api-reference.md 以下是这份 API Reference Manual(API 参考手册) 的完整中文翻译: API 参考手册 版本:0.1 目录 概览 1.1 API 目的 1.2 通信协议与核心概念 HTTP API 2.1 POST /se…

LeetCode Hot 100 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums [0,1]…

AI大模型如何有效识别和纠正数据中的偏见?

当下,人工智能大模型已成为推动各行业发展的关键力量,广泛应用于自然语言处理、图像识别、医疗诊断、金融风控等领域,为人们的生活和工作带来了诸多便利。然而,随着其应用的不断深入,数据偏见问题逐渐浮出水面&#xf…

如何通过内网穿透,访问公司内部服务器?

“凌晨2点,销售总监王姐在机场候机时突然接到客户电话——对方要求立即查看产品库存数据。她慌忙翻出笔记本电脑,却发现公司内网数据库没有公网IP,VPN连接又卡在验证环节……这样的场景,是否让你想起某个手忙脚乱的时刻&#xff1…

12. isaacsim4.2教程-ROS 导航

1. Teleport 示例 ROS 服务的作用: 提供了一种同步、请求-响应的通信方式,用于执行那些需要即时获取结果或状态反馈的一次性操作或查询。 Teleport 服务在 ROS 仿真(尤其是 Gazebo)和某些简单机器人控制中扮演着瞬移机器人或对象…

DeepSpeed-FastGen:通过 MII 和 DeepSpeed-Inference 实现大语言模型的高吞吐文本生成

温馨提示: 本篇文章已同步至"AI专题精讲" DeepSpeed-FastGen:通过 MII 和 DeepSpeed-Inference 实现大语言模型的高吞吐文本生成 摘要 随着大语言模型(LLM)被广泛应用,其部署与扩展变得至关重要&#xff0…

操作系统:操作系统的结构(Structures of Operating System)

目录 简单结构(Simple Structure) 整体式结构(Monolithic Structure) 什么是 Kernel(内核)? 层次结构(Layered Structure) 微内核结构(Microkernel&#x…

Python柱状图

1.各国GDP柱状图2.各国GDP时间线柱状图

FastGPT:企业级智能问答系统,让知识库触手可及

在信息爆炸的时代,企业如何高效管理和利用海量知识?传统搜索和文档库已难以满足需求。FastGPT正成为企业构建智能知识核心的首选。一、FastGPT:不止于问答的智能知识引擎FastGPT 颠覆了传统知识库的局限,其核心优势在于&#xff1…

探索 MyBatis-Plus

引言在当今的 Java 开发领域,数据库操作是一个至关重要的环节。MyBatis 作为一款优秀的持久层框架,已经被广泛应用。而 MyBatis-Plus 则是在 MyBatis 基础上进行增强的工具,它简化了开发流程,提高了开发效率。本文将详细介绍 MyBa…

Hive【安装 01】hive-3.1.2版本安装配置(含 mysql-connector-java-5.1.47.jar 网盘资源)

我使用的安装文件是 apache-hive-3.1.2-bin.tar.gz ,以下内容均以此版本进行说明。 以下环境测试安装成功: openEuler 22.03 (LTS-SP1)系统 MySQL-8.0.40 1.前置条件 MySQL数据库 我安装的是 mysql-5.7.28 版本的,安装方法可参考《Linux环境…

璞致 PZSDR-P101:ZYNQ7100+AD9361 架构软件无线电平台,重塑宽频信号处理范式

璞致电子 PZSDR-P101 软件无线电平台以 "异构计算 宽频射频 工业级可靠性" 为核心设计理念,基于 Xilinx ZYNQ7100 处理器与 ADI AD9361 射频芯片构建,为工程师提供从 70MHz 到 6GHz 的全频段信号处理解决方案。无论是频谱监测、无线通信原型…

【基础】go基础学习笔记

基础及关键字if for switch都支持使用隐形声明(:)来快速声明一个变量,无需在上面一行额外声明,这可以增加代码简洁性,但不太符合其他常规语言的写法,需要习惯一下if for switch都不需要使用(&am…