首页 > 其他分享 >bio、nio、aio,同步和阻塞的区别

bio、nio、aio,同步和阻塞的区别

时间:2023-07-24 20:36:00浏览次数:43  
标签:bio 同步 nio 阻塞 应用程序 aio 内核 IO 操作系统

java从程序从网络中读取一组数据,首先从用户态发出IO请求,申请系统调用。操作系统内核收到系统调用,执行对应的IO操作。
1.首先由DMA从网卡缓存区将数据拷贝到系统的内核缓冲区。
2.再由内核讲内核缓存区的数据拷贝到用户态的用户缓冲区当中。此时,数据拷贝完成依次返回。

这个过程中存在这么几个步骤,第一,用户态发起IO请求。第二内核态执行IO具体的读写操作。(基于这两个部分谈同步和阻塞的概念)

1.用户态发起IO请求如果一直等待数据,那么叫阻塞。用户在发起IO请求后直接返回,叫非阻塞

2.而对于系统内核线程,执行IO具体的读操作的时候,如果一直等待则叫同步。如果不等待直接返回则叫异步。

异步行为往往需要操作系统内核,通知应用程序,所以需要操作系统深度参与。只有在高版本的Linux发行版本中才支持。

BIO叫同步阻塞IO

应用程序从用户态发起IO申请,阻塞;而内核态执行IO操作同步。所以BIO叫同步阻塞IO。

nio同步非阻塞IO

应用程序发起IO申请之后,应用程序直接返回叫非阻塞。而操作系统内核仍然采用同步的方式,进行数据IO。非阻塞的应用程序,可以使用轮询的方式(用户态),进行数据探测。

AIO异步非阻塞式的IO模型

应用程序发起IO申请之后,应用程序直接返回叫非阻塞。操作系统内核采用异步的方式进行IO操作。IO结束之后,需要由于操作系统内核,通知应用程序。AIO是理想的完美解决方案,但是支持他的系统版本不多。

最流行的是IO多路复用

这也是同步IO,它只是将轮询的操作,由用户态转到了内核态。由操作系统,提供一系列可调用的系统调用函数,实现IO多路复用。本质上,是阻塞一个线程,实现类似异步调用的操作。
相当于10个人排队,吃饭,留下来一个人排队,其他的爱干啥干啥。排到了,这个线程去通知其他线程。java的NIO是基于IO多路复用实现的。Netty是一种封装实现。

转载:https://www.bilibili.com/video/BV1VX4y187Ga/?spm_id_from=333.999.0.0&vd_source=46d50b5d646b50dcb2a208d3946b1598

标签:bio,同步,nio,阻塞,应用程序,aio,内核,IO,操作系统
From: https://www.cnblogs.com/chenyi502/p/17578261.html

相关文章

  • centos7 安装 minio RELEASE.2021-06-17
    1、下载执行包wgethttps://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2021-06-17T00-10-46Z2、创建数据、日志文件夹mkdir-p/data/project/minio/data/mkdir-p/data/project/minio/log/touch/data/project/minio/log/minio.log3、授......
  • android nio socket
    AndroidNIOSocket实现流程1.创建SocketChannel对象首先,需要创建一个SocketChannel对象来建立与服务器的连接。可以通过open()方法创建一个SocketChannel对象,然后使用connect()方法连接到服务器的IP地址和端口号。SocketChannelsocketChannel=SocketChannel.open();socket......
  • 2288v3进入bios
    2288v3进入BIOS在计算机中,BIOS(BasicInput/OutputSystem)是一种固件,它是计算机主板上的一个芯片,负责初始化硬件设备、启动操作系统和提供基本的输入输出功能。什么是2288v32288v3是一种服务器芯片,它具有强大的计算和处理能力,在数据中心中被广泛应用。在使用2288v3服务......
  • minio性能测试
    minio性能测试minio的使用前期使用了s3fs但是想验证一下性能相关,所以使用今天简单验证了一下,其实也可以使用一下fio但是s3fs是对象存储没有修改只有上传,所以感觉还是使用dd更加好一些.dd性能测试脚本-读取rm-rf/tmp/cache/*echo3>/proc/sys/vm/drop_cach......
  • BIOS与系统自启
    知识储备C语言C++汇编Linux汇编补充C++文章复习汇编部分补充数据描述符AX累加器:用到最多最频繁,AX,AH和AL在乘,除法等操作中有专门的用途。BX基址寄存器:用于存放偏移地址CX为计数寄存器:在循环操作中做计数器用,用于控制循环程序的执行次数DX数据寄存器:在乘,除法及I/O......
  • mysql union 优化
    MySQLUnion优化1.概述在MySQL数据库中,UNION操作用于合并两个或多个SELECT语句的结果集。然而,当UNION操作涉及多个大表时,可能会导致性能下降。本文将介绍一些优化技巧,以提高UNION查询的性能。2.优化步骤步骤操作1使用UNIONALL替代UNION2添加索引......
  • Access 不支持将括号放在 UNION ALL 子句之前
    下面是错误的语句:SELECT查询1.产品ID,Sum(查询1.数量之合计)AS数量之合计之合计,查询1.仓库FROM((SELECT入库单.产品ID,Sum(入库单.数量)AS数量之合计,入库单.仓库FROM入库单GROUPBY入库单.产品ID,入库单.仓库)UNIONALL(SELECT出库单.产品ID,Sum(出库......
  • x86架构BIOS攻击面梳理与分析
    x86架构BIOS攻击面梳理与分析之前的一份学习笔记,主要整理了一下x86架构下BIOS的一些攻击面,BootKit部分还没有搬上来。可能有一些理解存在疏漏的地方,还请看官老爷斧正。调研目标一、梳理安全启动的基本流程经历的过程软硬件层面需要完成的工作二、梳理攻......
  • 如何修改电脑的BIOS密码?
      本文介绍设置、修改Windows电脑BIOS模式密码的具体方法。  一般的,电脑默认都是不含有BIOS密码的,可以直接在开机时不输入任何密码进入BIOS模式;而在某些特定的场合,我们可能需要对其加以密码的设置。也是在最近,我的电脑出了一些问题;在尝试自己动手解决的同时,进行了BIOS密码的......
  • MINIO配置TLS访问
    服务端证书生成opensslgenrsa-outca.key2048opensslreq-x509-new-nodes-keyca.key-subj"/CN=*.*.*.*"-days365-outca.crtopensslgenrsa-outserver.key2048opensslreq-new-nodes-keyserver.key-subj"/CN=*.*.*.*"-outserver.cs......