8. io

解决CentOS 8中Docker与containerd.io冲突 在CentOS 8上安装Docker CE时,常遇到containerd.io与runc版本冲突问题,主要源于系统默认的Podman工具链与新Docker组件的依赖不兼容。本文提供四种解决方案:1)强制替换冲突组件,2)手动升级containerd.io,3)彻底清理容器工具链后重装,4)使用第三方仓库降级runc。关键步骤包括检查组件版本、启动服务及配置镜像加速。建议生产环境锁定稳定版本组合,并注意内核兼容性和防火墙设置。文章还深入解析了containerd与runc的关系及Podman的替代影响,推荐优 阅读详情

io,读写,指的是内存,
读是内存从文件网络等读取数据
写是内存写数据到文件网络等

bio(同步阻塞io)

叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶
一个请求创建一个线程

nio(java的nio就是linux的多路复用io)Netty、Dubbo、ZooKeeper等都是基于NIO方式实现

  1. bio面向字节流,nio面向块(buffer)
  2. 直接内存(非堆内存),减少拷贝次数(原来是堆内存拷贝到非堆内存,在拷贝到缓冲区)
  3. 内核和磁盘io通过channel,不占用cpu资源(原来调用io资源需要cpu参与)
  4. 多路复用器selector(检查多个channel是否准备好),select,epoll

所有数据都通过Buffer对象处理,所以,您永远不会将字节直接写入到Channel中,相反,您是将数据写入到Buffer中;同样,您也不会从Channel中读取字节,而是将数据从Channel读入Buffer,再从Buffer获取这个字节
在这里插入图片描述

异步 I/O 的一个优势在于,它允许您同时根据大量的输入和输出执行 I/O。同步程序常常要求助于轮询,或者创建许许多多的线程以处理大量的连接。使用异步 I/O,您可以监听任何数量的通道上的事件,不用轮询,也不用额外的线程。

Selector它可以注册到很多个Channel上,监听各个Channel上发生的事件,并且能够根据事件情况决定Channel读写。这样,通过一个线程管理多个Channel,就可以处理大量网络连接了。
在这里插入图片描述
在这里插入图片描述

一旦调用了select()方法,它就会返回一个数值,表示一个或多个通道已经就绪,然后你就可以通过调用selector.selectedKeys()方法返回的SelectionKey集合来获得就绪的Channel。请看演示方法:

Set selectedKeys = selector.selectedKeys();

当你通过Selector注册一个Channel时,channel.register()方法会返回一个SelectionKey对象,这个对象就代表了你注册的Channel。这些对象可以通过selectedKeys()方法获得。你可以通过迭代这些selected key来获得就绪的Channel

AIO(异步非阻塞,无需轮询,线程结束后主动通知)

为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了。

同步&异步

同步
发送一个请求,等待返回,再发送下一个请求,同步可以避免出现死锁,脏读的发生。

异步
发送一个请求,不等待返回,随时可以再发送下一个请求,可以提高效率,保证并发。

阻塞&非阻塞

阻塞
传统的IO流都是阻塞式的。也就是说,当一个线程调用read()或者write()方法时,该线程将被阻塞,直到有一些数据读读取或者被写入,在此期间,该线程不能执行其他任何任务。在完成网络通信进行IO操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量的客户端时,性能急剧下降。

非阻塞
JavaNIO是非阻塞式的。当线程从某通道进行读写数据时,若没有数据可用时,该线程会去执行其他任务。线程通常将非阻塞IO的空闲时间用于在其他通道上执行IO操作,所以单独的线程可以管理多个输入和输出通道。因此NIO可以让服务器端使用一个或有限几个线程来同时处理连接到服务器端的所有客户端。
在这里插入图片描述

---------------------------------------------------

基本概念

缓冲区

调用read,DMA拷贝到内核缓冲区,再拷贝到用户缓冲区
在这里插入图片描述
硬件设备通常不能直接访问用户空间(虚拟内存地址)

虚拟内存(需要映射)

在这里插入图片描述
通过内存映射,减少了内核与用户空间数据的拷贝

虚拟内存分页,存在于外部磁盘存储,MMU管理内存映射关系,通过页错误来替换内存与磁盘的页
在这里插入图片描述

文件io

用户使用read和write操作内存,在内核空间 的文件系统页与用户空间的内存区之间移动数据,一次以上的拷贝操作几乎总是免不了的
在这里插入图片描述
文件锁定

流io
就绪型io

选择器

缓冲区连接通道,通道连接套接字或文件
通道注册到选择器上,注册成功后返回选择键(SelectionKey,包含通道,选择器,感兴趣的操作,ready的集合)(关联通道和是否就绪,调用选择器的select更新就绪状态)
选择器管理着被注册的通道集合的信息和它们的就绪状态,已选择的键的集合
可选择通道:这个抽象类提供了实现通道的可选择性所需要的公共方法,可以指定对 那个选择器而言,那种操作是感兴趣的;FileChannel 对象不是可选择的,因为它们没有继承 SelectableChannel(见图 4-2)。 所有 socket 通道都是可选择的
在这里插入图片描述

STM8S IO最快翻转速度 需求:IO产生最快的翻转脉冲。 第一次尝试: IRC使能16M,不分频。 IO设置为推挽高速输出。 While(1)死循环翻转。 代码如下: void main(void) { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //16M GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIG... 阅读详情

相关推荐

51单片机:IO口扩展,74HC595芯片,8*8点阵

我们在之前的学习中,都是通过IO口直接控制板子上的外围器件:LED、数码管等。如果想要连接更多的外围设备,就需要通过扩展IO来实现。(74HC595芯片)

ChenWenHaoHaoHao的博客 4164

8.深入文件I/O

1、静态文件 文件存放在磁盘文件系统中,并且以一种固定的形式进行存放,我们把他们称为静态文件。 硬盘的最小存储单位叫做“扇区” (Sector),一个扇区的为512字节,也就是0.5KB,操作系统在读取硬盘内容的时候如果一个一个扇区的进行读取,会导致效率很低。因此对于操作系统来说读取磁盘通常都是以"块"(block)为单位,常见的块是4KB。2、inode 静态文件的数据都存储在磁盘设备中对应的不同的"块"中,open函数是通过文件对应的inode号找到数据的存储区

qq_42174306的博客 260

如何浏览与下载全球免费的地图高分辨率(亚米级)的遥感影像?

前言 如果你想使用商业卫星的高分辨遥感影像,一般价格昂贵。我们可以使用地图平台上免费的高分辨率数据。目前数据源很多,比如说google earth、天地图、四维地球、必应地图等等。这些影像统一有一个共同点就是:RGB三波段;Web地图瓦片服务。这意味着我们可以通过瓦片服务下载影像,但下载的影像只有三个波段,分别是 一.引言 二、可使用高分辨率的地图数据源 1.Google Earth影像 2.Esri World Image 3.天地图 4.必...

锐多宝的地理空间 2万+

最强大的Docker插件 fabric8io/docker-maven-plugin

fabric8io的插件不仅支持docker镜像构造(build),镜像推送(push),还支持对容器操作(如run,stop,remove等),也就是说它可以实现对Docker从构建镜像到运行和推送完整的控制流程,这是它独树一帜的地方. 在众多docker-maven插件中,fabric8io的docker-maven-plugin毫无疑问是最强大的. 现在网上相关的教程大多是使用spoti...

且炼时光 2万+

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

beyond951的博客 7333

储能电站 BMS 与车载动力电池 BMS 核心差异:工况、保护策略、控制逻辑对比

储能电站BMS与车载动力电池BMS虽同名,实为针对不同赛道量身定制的产品。简单地将车载BMS方案套用于储能,或将储能BMS思路用于车载,都可能带来性能、安全或成本上的严重问题。在选择和设计BMS时,必须回归其应用场景的本质需求储能BMS是**“资产管理者”**,精打细算,追求在长达十余年的服役期内稳定、高效地创造收益。车载BMS是**“性能与安全卫士”**,反应敏捷,确保在车辆全生命周期内动力澎湃且万无一失。

小帽子的博客 423

stm8s io配置

stm8s的io有DDR,IDR,ODR,CR1,CR2这几个寄存器。对于io的配置,其实看懂下面这张表就懂了。一般用到的也就是推挽输出,浮空输入和上拉输入。下面以PC1脚为例说明该如何配置这三种模式。推挽输出:PC_DDR_DDR1 = 1;//io方向:输出PC_CR1_C11 = 1;//因为DDR为1,所以CR1置1表示推挽输出模式PC_ODR_ODR1 = 1;//1:输出高 , 0:输...

qq_34045238的博客 4235

Type-C连接中的CC引脚:Rp与Rd电阻的识别与供电模式选择

本文深入解析Type-C接口中CC引脚的核心功能,包括Rp与Rd电阻的识别原理及供电模式选择机制。通过详细的分压计算和实战案例,揭示Type-C设备如何通过CC引脚实现方向检测、角色识别和供电协商,为硬件设计提供关键指导。

weixin_30616969的博客 341

atmega8 IO驱动能力

普通51 IO口 拉电流100ua 灌电流10ma   atmege8 IO口 拉电流20ma 灌电流 20ma   今天又在焊的板子上加了一个蜂鸣器,IO口直接驱动,比悲剧的51还要加个三极管驱动强多了   蜂鸣器果断很有远见的加到PWM口上去,到时可以放个音乐了

飞思卡尔 汽车电子 2155

从RADIUS服务器到AP:实战搭建一个小型WPA2-Enterprise测试环境(FreeRADIUS + 家用路由器)

本文详细介绍了如何从零搭建WPA2-Enterprise测试环境,使用FreeRADIUS服务器和家用路由器实现企业级WiFi认证。通过实战指南,包括证书生成、EAP-PEAP配置、OpenWrt路由器设置及故障排查,帮助网络工程师和爱好者掌握802.1X协议栈的实际应用。

weixin_28715953的博客 324

用 SQL 分析不同用户群组留存率

一、前言 用户增长对企业非常重要,主要包括: 新增、留存、召回 。本文介绍一个实用的分析留存率的方法: Cohort Analysis (群组分析),APP的下载量越高并不是说产品就越好,产品若没有很好的留存,花费大量时间和资源来挖掘新客户也将是竹篮打水一场空。群组分析有利于衡量用户在每个漏斗的用户流失节点、用户流失数据,从而帮助你发现产品的用户的行为模式和用户增长点。从本质上讲,群组分析Cohort Analysis为你提供了一种数据驱动的方法,用群组分析Cohort Analysis方法,可以来帮助提

qq_39984050的博客 3172

STM32的IO端口高8位或低8位单独操作方法

stm32的IO端口都是16位的, 如果要单独操作某高8位或低8位, 则不是那么简单, 先看两张BSRR/BRR寄存器的图: 据官方数据手册上面说, 这两个寄存器用于专门对ODR进行原子操作的位操作, 都是在置1的时候对某位有影响. 举例说下怎么对IO端口赋值: 1.对高8位/低8位/全部清零 很明显, 这个只需要操作BRR寄存器即可: 对高8位清零:GPIOA->BRR = 0xFF00 对低8位清零:GPIOA->BRR = 0x00FF 全部...

lxm920714的专栏 5149

Prism 入门02,区域介绍

什么是区域(Region)?区域,在Prism 框架中,区域是模块化的核心的功能之一,其主要作用是降低应用程序和模块之间的耦合度。使用方式:在应用程序的界面中,划分出某块区域,并为这个区域定义一个唯一的区域名称。那么通过这个区域名称,应用程序就可以找到指定的区域。并为这个区域动态放置一些容器或控件,从而呈现在界面中。

build2024 1125

STM8S001 IO口复用配PWM

最近用到STM8S001,因为一共8个Pin,所以要复用。 我使用的是TIM2_CH1(IO8)、TIM2_CH2(IO7)、TIM_CH3(IO5),输出3路PWM。 定时器与pwm配置 这个大同小异,大家都明白,不细说。 void TIM2_PWM_Config(uint16_t CCR1_Val,uint16_t CCR2_Val, uint16_t CCR3_Val) { /* TI...

qq_39280679的博客 1758

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】

Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。

一键难忘的博客 3万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM8S103之IO复用

本篇博文最后修改时间:2017年08月11日 23:20。 一、简介 本文以STM8S103F3P6编程为例,介绍STM8S103F3P6如何引脚复用。 二、实验平台 电脑平台:Windows7 64位旗舰 编译软件:IAR 硬件平台:STM8S103F3P6 三、版权声明 博主:_懵懂 声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。...

_懵懂的博客 8845

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

socket.io对IE8的支持

默认下载了最新版的socket.io,版本号是1.7.2,对IE8的支持不好,反正在IE8下收发消息都不行。在网上查了很多资料,都解决不了IE8的问题,崩溃。 最后用了一个大家比较认可的版本1.0.6,可以支持IE8: 卸载socket.io npm uninstall socket.io 安装1.0.6版本的socket.io npm install soc...

diejiankuai3444的博客 281

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM8L051F3 IO表现异常

大概两个月前

xiaocai_36 4310

stc8g1k08a IO口四种模式

STC8G1K08A单片机支持四种IO口工作模式:1)上拉准双向口(GPIO_PullUp),2)推挽输出(GPIO_OUT_PP),3)高阻输入(GPIO_HighZ),4)开漏输出(GPIO_OUT_OD)。通过GPIO_InitTypeDef结构体设置模式参数,使用GPIO_Inilize函数初始化。每种模式对应不同电气特性,适用于不同场景。官方头文件定义了相关宏和引脚常量(Px.0-Px.7),支持单个或组合引脚配置,为硬件开发提供灵活控制接口。

m0_46427520的博客 725

JAVA8的IO流源码简析

让我们来分析一下java8里面的IO源码。一般来说分两类,即字节流和字符流,通过下面的思维导向图总结下:关于流有几点是要注意的:第一,读写流要及时的关闭,使用close方法。第二,深入理解read和readline的区别。具体请看下面的源码:需要注意的是read方法有时候会出现内容丢失的情况。第三,读写字符流时要注意编码格式定义好。...

guotufu的博客 1397

GBase8s中的IO读写方法

GBase8s读写磁盘采用下面的两种方式之一。 ● 内核 IO(Kernal AIO)——通过操作系统来进行非阻塞的磁盘读写操作,传统的读写方式中,当数据要写到磁盘或者从磁盘读数据时,进程将处于等待的状态,内核IO代替了传统的这种方式,数据库递交了读写请求之后可以继续进行处理,当IO结束之后,数据库将被通知。需要浏览machine notes文件了解内核IO在你的操作系统上是否可以使用,并且只有裸设备才可以使用KAIO。 ● 异步IO ——数据库通过AIO虚处理器完成磁盘读写操作。当没有配置KAIO时,

gmr_888888的博客 334

STM8 普通IO配置模拟串口输出

刚接到上级的需求,由于stm8的串口资源较少,需要在原来工程的基础上加多一个io来输出串口数据。串口在每个学习单片机的人来说都是耳熟能详的东西。没有串口基础的同学建议先去学习串口知识点再来阅读。 首先我们知道串口数据配置里面包含:波特率、流控、数据起始位、数据位、奇偶校验位、停止位。针对本人经常选的配置为: 波特率 115200 bps 流控 无 数据位 8 ...

fangjiaze444的博客 1861

Java 8章 IO 编程题

题目一利用DataInputStream类和BufferedInputStream类编写一个程序,实现从键盘读入一个字符串,在显示器上显示前两个字符的Unicode码以及后面的所有字符。结果请输入字符串 asdfjkl 字符一的Unicode码:97 字符二的Unicode码:115 d f j k l思路DataInputStream 类继承自 FilterInputStr

SmacUL的博客 1823

瑞萨RA8系列教程 | 瑞萨RA8单片机IO中断配置

关注+星标公众号,不错过精彩内容作者 | strongerHuang微信公众号| strongerHuang本文为结合瑞萨e2 studio工具,以及CPKCOR_RA8D1B评估板,给大家讲述瑞萨RA8D1单片机IO中断配置实现的方法。实现简单的功能:配置一个LED翻转(亮灭)+一个按键(Key)中断,按键按一次,LED翻转一下。准备工作开发RA8D1单片机需要提前安装好软件工具,还有准备好R...

strongerHuang 1382
上一篇: 消息队列 _
下一篇: redis 极客
big muscle
博客等级 码龄11年 145粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值