【高并发】高并发 IO 核心基础

Java中使用异步IO的终极指南 Java 提供了多种异步 I/O 的实现方式,主要包括 NIO.2 (AsynchronousFileChannel) 和 NIO (Selector),下面我将详细介绍各种用法和最佳实践。 阅读详情

IO基础

操作系统将内存(虚拟内存)分为两部分(为了避免用户进程直接操作内核,以保证内核安全)

  • 内核空间 · Kernel-Space

    • 运行内核模块,对应的进程处于内核态
  • 用户空间 · User-Space

    • 运行用户程序,对应的进程处于用户态

用户态进程必须要通过系统调用(System Call) 向内核发出指令,完成调用系统资源之类的操作;内核态进程则无限制

“用户程序进行IO的读写依赖于底层的IO读写,基本上会用到底层的read和write两大系统调用。虽然在不同的操作系统中read和write两大系统调用的名称和形式可能不完全一样,但是它们的基本功能是一样的。”

摘录来自: 尼恩. “Java高并发核心编程. 卷1, NIO、Netty、Redis、ZooKeeper。” Apple Books.

其实就是,操作系统内核完成物理设备(磁盘、网卡等)和内核缓冲区之间的交换;而应用程序完成内核缓冲区到进程缓冲区之间的数据交换

我们以为的IO实际上不是物理设备级别的读写,而是缓存的复制

4种主要的IO模型

  • 阻塞IO/非阻塞IO

    • “阻塞”指的是用户程序(发起IO请求的进程或者线程)的执行状态
    • 阻塞IO:指的是需要内核IO操作彻底完成后(非阻塞则无需)才返回到用户空间执行用户程序的操作指令
  • 同步IO/异步IO

    • 是发起IO的两种方式
    • 同步IO:用户空间主动发起,系统内核被动接收(例如input);异步IO则相反(例如output)

同步阻塞IO · Blocking IO

用户空间主动发起,需要等待内核IO操作彻底完成后,才返回到用户空间的IO操作;即在IO操作过程中,发起IO请求的用户进程/线程处于阻塞状态

默认情况下,在Java应用程序进程中所有对socket连接进行的IO操作都是同步阻塞IO

同步非阻塞IO · Non-Blocking IO

用户空间主动发起,无需等内核IO操作彻底完成,即可返回到用户空间去执行后续操作的IO操作(但会立刻返回给用户一个IO状态值);即在IO操作中,发起IO请求的用户进程/线程处于非阻塞状态

需要不断轮询内核,以确定数据是否准备好(一般不直接使用)

IO多路复用 · IO Multiplexing(也称异步阻塞IO)

用户进程/线程监视多个文件描述符,一旦有“就绪”的描述符(一般是内核缓冲区可读/可写),内核就会将文件描述符的就绪状态返回给用户进程/线程,用户空间可以根据文件描述符的就绪状态进行相应的IO系统调用

可避免同步非阻塞IO模型中轮询等待的问题,Java中的Selecter就属于这种模型

异步IO · Asynchronous IO(信号驱动IO)

内核空间主动调用,用户空间被动接收(不会被阻塞,但需要进行事件的注册与接收)

即当用户线程收到了通知时,数据已经被内核读取完毕并放在了用户缓冲区内

Java中的回调模式,用户进程/线程向内核空间注册了各种IO事件的回调函数,由内核主动调用

 

Java中的异步非阻塞I/O操作 异步非阻塞I/O(Asynchronous Non-Blocking I/O)是指在执行I/O操作时,不会阻塞线程。传统的阻塞I/O操作会让线程等待I/O操作完成,而异步非阻塞I/O则允许线程在等待I/O操作完成期间继续执行其他任务。NIO提供了强大的工具来处理高效的I/O操作,尤其是在高并发环境下,能够显著提升系统的性能和响应能力。此外,Java 7引入了NIO.2(Asynchronous I/O)的增强,进一步提升了异步I/O操作的能力。今天我们来探讨一下Java中的异步非阻塞I/O操作。 阅读详情

相关推荐

深入io_uring性能优化:从liburing基础到高并发网络服务器实战

本文深入探讨了io_uring这一Linux高性能I/O框架,从liburing基础API入手,通过重写cat程序的实战案例,详细解析了其异步、零拷贝和批量提交的核心优势。文章进一步阐述了如何利用io_uring构建高并发网络服务器,并重点介绍了批量提交、固定资源注册和内核轮询等高级特性,为开发者提供了一套完整的性能优化实战指南。

weixin_29200741的博客 186

JAVA非阻塞IO、异步IO(NIO、AIO)

新的输入/输出(NIO)库是在JDK 1.4中引入的。NIO弥补了原来同步阻塞I/O的不足,它在标准Java代码中提供了高速的、面向块的I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO不用使用本机代码就可以利用低级优化,这是原来的I/O包所无法做到的。下面我们对NIO的一些概念和功能做下简单介绍,以便大家能够快速地了解NIO类库和相关概念。

zhiqingcn的专栏 2076

异步IO API(Asynchronous I/O API)和RxJava结合实现异步读写文件的功能

在write()方法中,我们使用AsynchronousFileChannel类的write()方法来异步写入数据,并将写入完成的回调函数封装在一个Observable对象中。在使用时,我们可以创建一个Subject对象,用来接收写入完成的消息。然后,我们可以将写入完成的回调函数封装在一个Observable对象中,并使用RxJava的Subject对象来发送写入完成的消息。需要注意的是,在写入完成后,我们需要调用Subject对象的onNext()方法来发送一个空的消息,表示写入完成。

资深全栈开发工程师 1149

Java中异步复用io

NIO:通过Selector和Channel实现非阻塞I/O。NIO.2:使用和支持回调的异步I/O。异步任务调度:结合编排异步任务。高性能I/O框架:使用Netty提供的高层次异步I/O处理。响应式编程:采用 Reactor、RxJava 等响应式编程框架处理异步I/O。

yymagicer的博客 1606

解锁异步编程潜能:如何利用 `asyncio` 模块构建高并发 IO 密集型服务

本文详细探讨了如何利用asyncio背景介绍:回顾 Python 发展历程及其在高并发场景中的优势,阐述了为何要关注异步编程。基础知识:简单回顾了 Python 的基本语法、数据类型及面向对象特性,为理解异步编程打下基础。异步核心原理:深入解析了协程、事件循环、任务调度与异常处理的机制,展示了asyncio的强大功能。实战案例与最佳实践:通过实际案例(如高并发 HTTP API 服务),演示了如何利用 aiohttp 与 asyncio 优雅处理大量并发请求。前沿展望。

铭渊老黄 129

高校学籍管理系统(SQL Server数据库课程设计)

摘要: 高校的管理工作是一项复杂且系统化的工作。而随着当代社会积极响应国家“科教兴国”的战略。高校建设规模和招生人数每年均高不下,庞大的学生群体对高校的管理工作带来了巨大的挑战。而对学生的学籍管理工作更是高校管理工作的一个重要环节。 面对高校学生学籍信息如此庞大的数据群,如采用传统的管理模式,管理工作的效率不仅低下,而且数据错误的发生率相对较高,还会产生人力和物力上的巨大开支。面对这样的情况,开发一个高校学籍管理系统就显得尤为重要。 运用高校学籍管理系统可以大大提高高校管理工作效率、方便系统维护、减小开支、

qq_52030824的博客 7万+

【第一篇】网络基础核心:TCP 可靠性原理与 IO 模型,服务端高并发的 “地基”

本期内容主要讲解TCP可靠传输与IO模型两大核心知识点。TCP部分详细解析了三次握手、四次挥手机制,重点解答了面试高频问题如SYN包初始序列号作用、TIME-WAIT状态意义等,并给出线上TIME-WAIT过多的解决方案。IO模型部分对比分析了BIO/NIO/select/epoll四种模型,深入讲解epoll的事件触发机制及其在Netty中的应用。文章还设置了TCP粘包、Redis单线程等实战思考题,帮助读者巩固知识。下篇将转向操作系统基础,讲解进程线程等核心概念。

weixin_69024727的博客 1680

点云直线检测-3DLineDetection复现

点云直线分割-Fast 3D line detection

阁楼 8156

一、Netty-高并发IO底层原理(5种主要的IO模型)

本文深入探讨了Linux系统中的IO读写原理及其五种主要模型。首先分析了内核空间与用户空间的交互机制,指出应用程序通过系统调用在内核缓冲区与用户缓冲区间交换数据。接着详细介绍了同步阻塞IO、同步非阻塞NIO、IO多路复用、信号驱动IO和异步IO等五种模型的特点、流程及适用场景,其中IO多路复用模型因其高效处理大量连接而成为高性能服务器的基础。最后讲解了如何通过修改Linux系统配置(如文件句柄数限制)来支持百万级并发连接。文章为深入理解系统级IO处理和高并发编程提供了全面的理论基础和实践指导。

洛晓关的博客 936

UVM入门与进阶学习笔记17——寄存器模型(3)

目录寄存器模型的常规方法mirror、desired和actual valueprediction的分类自动预测显式预测uvm_reg的访问方法mem与reg的联系和差别内建(built-in)sequences寄存器模型内建序列存储模型内建序列寄存器健康检查寄存器应用场景寄存器检查功能覆盖率概述覆盖率自动收集模式覆盖率外部事件触发收集 寄存器模型的常规方法 mirror、desired和actual value 在应用寄存器模型时,除了利用它的寄存器信息,也会利用它跟踪寄存器的值。 寄存器模型中的每

weixin_41979380的博客 7537

实战教程:如何用Python+小波变换+CNN搞定医学影像中的条纹噪声(附完整代码)

本文提供了一套完整的实战方案,指导如何利用Python结合小波变换与卷积神经网络(CNN)去除医学影像中的条纹噪声。该方法通过小波变换精准定位噪声,再使用轻量化CNN进行针对性清除,有效保护图像细节,并附有可运行的完整代码,为医学影像处理与AI分析提供高效工具。

weixin_29056101的博客 269

探秘网络IO:从基础到多路复用的核心原理

网络IO操作是数据传输的基础,微信等应用的通信本质是不同数据形式的网络传输。摘要介绍了从TCP服务器搭建(socket/bind/listen)到IO多路复用技术(select/poll/epoll)的实现原理:select通过bit位集合轮询fd状态;poll使用结构体数组提高容量;epoll采用红黑树管理fd,通过回调机制将就绪事件加入链表,效率更高。文章对比了三者在接口设计、触发机制(水平/边沿触发)和性能特点(select适合少量活跃连接,epoll擅长高并发场景)的差异,并解释了连接建立/断开的事

2502_92577768的博客 1840

告别以太网瓶颈:手把手教你为AI训练集群搭建InfiniBand网络(以NVIDIA DGX A100/H100为例)

本文详细指导如何为AI训练集群搭建InfiniBand网络,解决以太网瓶颈问题,特别针对NVIDIA DGX A100/H100系统。通过硬件选型、网络架构设计和性能调优,显著提升多机多卡训练效率,适用于大规模模型训练场景。

weixin_30336061的博客 312

【Linux之旅】五种 IO 模型与阻塞 IO:带你彻底搞懂 Linux IO 设计哲学

本文将从 IO 的本质出发,用钓鱼的故事串联五种 IO 模型,理清"同步/异步"和"阻塞/非阻塞"这两对最易混淆的概念,最后用 fcntl 实战带你把默认的阻塞 IO 改成非阻塞模式。读完本文,你将能够在面试中清晰地画出五种 IO 模型的流程图、解释它们之间的本质区别,并亲手写出非阻塞 IO 的 C 代码。

2302_80243065的博客 822

LabVIEW多界面应用开发:从启动器到主界面的切换架构与实现

在图形化编程领域,模块化与界面管理是构建复杂应用程序的核心。其原理在于通过清晰的程序架构,实现不同功能模块间的独立运行与协同工作,从而提升代码的可维护性和可扩展性。这种架构的技术价值在于能够有效管理应用程序的生命周期与资源,避免内存泄漏,并确保流畅的用户体验。在测控系统、自动化测试等工程实践中,常需实现如启动界面选择语言或模式后,无缝切换至主功能界面的场景。本文聚焦于LabVIEW环境,深入探讨如何利用动态调用、状态机等机制,并结合功能全局变量(FGV)与队列消息处理器(QMH)等热词技术,构建健壮的多界面

weixin_30802819的博客 263

c++ pcl点云处理(2025 长期更新)

目录1.常用的点云文件2.认识点云的文件格式3.点云的数据结构4.输入输出(IO)5.KD树6.Oc树(八叉树)7.点云可视化8.点云滤波9.点云拟合分割10.点云与图像11.特征点与特征描述及提取12.点云配准13.点云曲面重建

twnkie的博客 2259

linux-高级IO(上)

摘要:本文介绍了非阻塞IO和多路复用select技术。非阻塞IO通过fcntl设置O_NONBLOCK标志实现,使read操作在没有数据时立即返回而非阻塞等待,适用于需要即时响应的场景。多路复用select使用fd_set位图结构监控多个文件描述符,通过输入输出型参数实现事件检测,但存在fd数量限制和遍历开销大的缺点。文中比较了5种IO模型,重点说明了非阻塞IO和select的原理、实现方式及适用场景。

nplplus的博客 1299

UG NX二次开发基础篇-外部模式与DLL内部模式(二 DLL内部模式)

通常情况下,我们希望我们的外挂,在UG启动的时候,就自动加载我们的外挂,并以菜单和工具条的方式,显示在UG上面。当然,这也是市面上所有外挂的操作,因为您不可能要求你的用户,以手工加载的方式,去调用你的外挂吧。在上一篇中,有粉丝留言说,启动 bat 文件,启动EXE外挂,会提示无法找到DLL的错误,这是因为UG的环境变量设置有问题,这里,我们把BAT文件作一个修改,直接改为实际目录。EXE外部模式,还有很多部分需要添加的,如参数的传递、输出消息的显示、UG操作的消息显示,等等。Dll执行结束后,会调用。

u014657217的博客 1655

java面试中经常会问到的IO、NIO问题有哪些(基础版)

IO/NIO 面试重点考察BIO 与 NIO 的本质区别NIO 三大组件的协作原理非阻塞与多路复用的实现及高并发场景下的 IO 模型选择。回答时需结合底层机制(如系统调用、内核态/用户态)和实战场景(如 Netty 的应用),体现对高性能 IO 的理解。

青鱼入云的博客 1223

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java高并发教程_Java高并发教程:Java NIO简介

Java高并发教程:Java NIOJava NIOJava NIO 全程未 Java New IO类库,目的是让Java支持非阻塞IO(Non-Block IO),故很多人也称之为 Java Non-Block IO。原先的阻塞式IO也被称为OIO(Old IO)。总体上来说,NIO弥补了原来面向流的OIO同步阻塞的不足,未标准Java代码提供了高速的、面向缓存区的IO。Java NIO主要由以...

weixin_42524610的博客 199

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java高并发核心知识点完整总结

高并发的知识体系,以JVM内存模型和线程机制为底层根基,核心矛盾是资源复用与共享竞争、线程管理与处理效率、同步一致与异步高效的平衡;从问题层面,主要面临缓存问题、死锁、线程耗尽、共享数据不一致四大类问题,对应的解决方案包括锁、无锁、线程安全集合、ThreadLocal、缓存、死信队列等;线程池是所有机制的集大成者,其自定义配置(线程数、队列、拒绝策略)需结合任务类型(CPU/IO密集)和业务场景,是高并发落地的核心工具;

Coder_Boy_的博客 1113

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

解锁Linux高并发服务器开发:从理论到实战

在我们的 Linux 高并发服务器项目中,整体架构采用了模块化设计,各个模块各司其职,协同工作,以实现高效的并发处理能力。其架构图如下:

大雨淅淅的博客 901

python 框架 高并发_Python3中tornado高并发框架

1.单线程tornado.web:基础web框架模块tornado.ioloop:核心IO循环模块,高效的基础。封装了:1.asyncio 协程,异步处理2. epoll模型:水平触发(状态改变就询问,select(),poll()), 边缘触发(一直询问,epoll())3.poll 模型:I/O多路复用技术4.BSD(UNIX操作系统中的一个分支的总称)的kqueue(kueue是在UNIX...

weixin_39608748的博客 201

Java 网络编程核心:BIO、NIO、AIO IO 模型深度解析与实战

Java网络编程IO模型解析:BIO、NIO与AIO 摘要:本文深入解析Java网络编程中的三种IO模型。BIO(同步阻塞IO)采用一连接一线程模式,编程简单但性能受限;NIO(同步非阻塞IO)通过Selector多路复用器实现单线程处理多连接,大幅提升并发能力;AIO(异步非阻塞IO)采用回调机制实现真正的异步处理。文章从Socket基础入手,详细对比了三者的核心原理、适用场景与性能差异,并提供了可直接运行的代码示例。通过学习,读者可掌握根据业务需求(连接数、实时性等)选择合适IO模型的能力,为构建高性能

qq_43843951的博客 1115

GitHub爆赞,阿里人Netty+Redis+zookeeper+高并发,带你争取一个有吸引力、薪酬竞争力的Offer

Netty、Redis、 ZooKeeper,作为高性能、高并发、高可用的实力代表,在争取一个有吸引力、薪酬竞争力的offer时,都是必须掌握的Java中间件。今天给小伙伴们分享的是Netty、Redis、Zookeeper、高并发实战手册

公众号:该用户快成仙了 197

首次公开,阿里技术官甩出377页高并发小册,面试实战齐飞

前言 高并发时代,Netty、Redis、ZooKeeper是高并发时代的必备工具。 据有关数据表明,高并发的面试题现在几乎蔓延至与Java项目相关的整个行业。无论是工作还是开发Java项目所必需的技术栈:分布式Java框架、Redis缓存、分布式搜索ElasticSearch、分布式协调ZooKeeper、消息队列Kafka、高性能通信框架Netty这些已经是当代程序员必须要掌握的东西。 但大部分程序员其实是没有Java高并发开发技术的基础的,对于高并发技术架构甚至很少能去参与的,一直做的就是C..

m0_65569079的博客 118
上一篇: 为型设计模式之访问者模式
下一篇: 「我有一剑可开天门」百度面试真题,这边建议是直接开冲
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值