首页 > 其他分享 >IO、NIO、BIO

IO、NIO、BIO

时间:2024-01-15 11:07:13浏览次数:17  
标签:BIO 调用 NIO read 阻塞 线程 IO channel

1、Stream 与 Channel

  • stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层)
  • stream 仅支持阻塞 API,channel 同时支持阻塞、非阻塞 API,网络 channel 可配合 selector 实现多路复用
  • 二者均为全双工,即读写可以同时进行
  • 虽然 Stream 是单向流动的,但是它也是全双工的

2、IO 模型

  • 同步:线程自己去获取结果(一个线程)
  • 例如:线程调用一个方法后,需要等待方法返回结果
  • 异步:线程自己不去获取结果,而是由其它线程返回结果(至少两个线程)
  • 例如:线程 A 调用一个方法后,继续向下运行,运行结果由线程 B 返回

当调用一次 channel.read 或 stream.read 后,会由用户态切换至操作系统内核态来完成真正数据读取,而读取又分为两个阶段,分别为:

  • 等待数据阶段
  • 复制数据阶段

IO、NIO、BIO_返回结果

根据 UNIX 网络编程 - 卷 I,IO 模型主要有以下几种

  • 用户线程进行 read 操作时,需要等待操作系统执行实际的 read 操作,此期间用户线程是被阻塞的,无法执行其他操作
  • 用户线程
    在一个循环中一直调用 read 方法,若内核空间中还没有数据可读,立即返回
  • 只是在等待阶段非阻塞


标签:BIO,调用,NIO,read,阻塞,线程,IO,channel
From: https://blog.51cto.com/u_13529088/9249360

相关文章

  • EVE-NG的环境导入IOL组件
    IOL或IOSOnLinux,也称为IOU或IOSOnUnix。IOL是一个模拟器,一般仅思科使用。IOL指为i386架构编译的Linux版本。IOU指为Sparc架构编译的Unix(Solaris)版本。由于IOL是内部IOS版本,因此IOL只能由Cisco授权客户使用。需要注意,这里的IOS区别于苹果IOS,是指互联操作系统是思科网络设备的操......
  • Adobe Audition 2024:音频处理的巅峰之作mac/win版
    AdobeAudition2024是一款功能强大的音频编辑和混音软件,专为专业音频制作而设计。这款软件提供了广泛的工具和功能,使用户能够处理、编辑和混合各种音频文件,从简单的音频编辑到复杂的音乐制作和后期制作工作。→→↓↓载AdobeAudition2024AdobeAudition2024引入了许多新功......
  • elixir before_compile && on_definition 简单使用
    elixir提供了一些方便的模块属性,可以让我们方便的进行elixir的扩展(尤其是进行元编程的时候)比如elixir_agent就使用到了before_compile以及on_definition,方便进行trace的处理on_definition的简单使用参考demo内容来自官方,可以实现输出函数的一些信息 defm......
  • DPO: Direct Preference Optimization 直接偏好优化(学习笔记)
    学习参考:链接1  一、为什么要提出DPO在之前,我们已经了解到基于人类反馈的强化学习RLHF分为三个阶段:全监督微调(SFT)、奖励模型(RM)、强化学习(PPO)。但是RLHF面临缺陷:RLHF是一个复杂且经常不稳定的过程,首先拟合反映人类偏好的奖励模型,然后使用强化学习微调大型无监督LM,以最大......
  • Visual Studio 2010 授权修改
    参见以下步骤:32位的系统中,修改以下注册表键值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Registration\UserNameHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\RegisteredOrganization64位系统,修改以下注册表键值HKEY_LOCAL_MACHINE\SOFT......
  • PostgreSQL 数据库日志收集功能开启-参数 log_truncate_on_rotation 设置
    log_truncate_on_rotation(boolean)--默认为off,设置为on的话,文件内容覆盖方式:off后面附加,on:清空再加当启用logging_collector时,此参数将导致PostgreSQL截断(覆盖)而不是追加到任何同名的现有日志文件。但是,截断只会在由于基于时间的旋转而打开新文件时发生,而不会在服务......
  • PostgreSQL 数据库日志收集功能开启-参数 log_rotation_age 设置
    log_rotation_age(integer)--保留单个文件的最大时长,默认是1d,也有1h,1min,1s当启用logging_collector时,该参数决定使用单个日志文件的最大时间,之后将创建一个新的日志文件。如果不指定单位,则以分钟为单位。默认为24小时。设置为0将禁用基于时间的新日志文件创建。该......
  • PostgreSQL 数据库日志收集功能开启-参数 log_rotation_size 设置
    log_rotation_size(integer)--保留单个文件的最大尺寸,默认是10MB当启用logging_collector时,该参数确定单个日志文件的最大大小。将此数量的数据发送到日志文件后,将创建一个新的日志文件。如果该值没有指定单位,则以千字节为单位。默认值是10兆字节。设置为0将禁用基于大......
  • PostgreSQL 数据库日志收集功能开启-参数 log_destination 设置
    一log_destination(string)日志记录类型,默认是stderr,只记录错误输出,推荐csvlog,总共包含:stderr,csvlog,syslog,andeventlog.PostgreSQL支持多种记录服务器消息的方法,包括stderr、csvlog、jsonlog和syslog。在Windows上,也支持eventlog。将此参数设置为以逗号分隔的......
  • 【动手学深度学习_李沐】笔记:(五)卷积神经⽹络(convolutional neural network,CNN)
    【五、卷积神经网络】笔记1.从全连接层到卷积特点(沃尔多检测器):①平移不变性:不管出现在图像中的哪个位置,神经⽹络的底层应对相同图像区域做出类似的响应,因此能够以相同的⽅式处理局部图像②局部性:神经⽹络的底层只探索输⼊图像的局部区域,这些局部特征可以融会贯通,在整个......