[求解] io 到底是什么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RedBeanIce
V2EX    问与答

[求解] io 到底是什么

  •  
  •   RedBeanIce 2022-03-07 10:51:54 +08:00 2651 次点击
    这是一个创建于 1387 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    1 ,我的计网较差

    2 ,我的操作系统理论较差

    3 ,普通 Java 一枚

    我理解的

    1 ,了解一些 Java 的 io 基础,,理解的一般都是网络上的,内核交互已经被封装了。

    2 ,nio 与 netty 有一些理解

    3 ,

    求解

    1 ,io 到底是什么,入门了解可以查看什么资料

    2 ,io 到底是什么,深入了解可以查看什么资料

    24 条回复    2022-03-08 10:10:15 +08:00
    Cabana
        1
    Cabana  
       2022-03-07 11:44:28 +08:00   2
    input/output
    learningman
        2
    learningman  
       2022-03-07 11:45:13 +08:00 via Android
    入门楼上已经帮你入完了,深入的话,你就把你差的那两个补好就好了
    RedBeanIce
        3
    RedBeanIce  
    OP
       2022-03-07 11:46:42 +08:00
    @Cabana
    @learningman
    没有系统的了解,还是不懂
    cheng6563
        4
    cheng6563  
       2022-03-07 11:47:58 +08:00
    IO 就是输入输出啊,常用的要么是对网络输入输出,要么对硬盘输入输出。
    硬盘 IO 不能并发,所以能用就行资料并不太多。
    网络 IO 因为能并发问题就复杂些了。
    你想了解到啥程度?
    2NUT
        5
    2NUT  
       2022-03-07 12:31:21 +08:00
    同步 异步 阻塞 非阻塞

    理论上所有的东西都是 IO

    都是 通讯模型
    0TSH60F7J2rVkg8t
        6
    0TSH60F7J2rVkg8t  
       2022-03-07 12:36:04 +08:00
    i 是眼睛,o 是嘴巴
    cmdOptionKana
        7
    cmdOptionKana  
       2022-03-07 12:44:21 +08:00
    这个要看上下文啊,IO 可以指很多东西。

    而且,也没必要特别研究 IO ,等遇到问题再解决问题,搞具体一点,比抽象学习更高效。
    cpstar
        8
    cpstar  
       2022-03-07 14:01:04 +08:00
    @ahhui 6# 窃以为,一个是嘴一个是...
    Ediacaran
        9
    Ediacaran  
       2022-03-07 14:02:27 +08:00 via iPhone
    Read/Write
    villivateur
        10
    villivateur  
       2022-03-07 14:02:59 +08:00 via Android
    @ahhui o 怎么可能是嘴巴?嘴巴也是 i
    duke807
        11
    duke807  
       2022-03-07 14:06:27 +08:00 via Android
    in 是,out 是出,加起就是一一出,跑起就是一一出一一出…

    便一提,很多人喜 .io 域名,就似很多人 logo 喜用 pornhub logo 的配色,同的心理。

    第一反是 io 口,芯片的管。。。
    AllenHua
        12
    AllenHua  
       2022-03-07 14:06:27 +08:00
    不管是 cpu 内部的寄存器还是内存(掉电失去数据),还是永久性的 flash 存储设备(比如 hdd 、ssd ),我所理解,IO 的终点都是往这些存储介质中读和写数据。IO 的过程就不那么重要了,殊途同归。
    Caturra
        13
    Caturra  
       2022-03-07 14:10:50 +08:00
    既然基础差,那么入门的方法就是补回基础。挑一本操作系统看看就理解了
    /div>
    paradoxs
        14
    paradoxs  
       2022-03-07 14:11:45 +08:00
    直接理解为硬盘存储就行了
    WIN2333
        15
    WIN2333  
       2022-03-07 14:20:06 +08:00
    你需要补补操作系统的知识,就是输入输出,你跟硬盘交互需要输入输出,你的显示器,键盘等等,皆可称为 IO 设备。cpu 执行的是一条条指令,与 IO 设备交互属于特权指令,操作系统需要进入内核态,然后等待 IO 设备响应。Java 里面提到的不同的 IO 模式其实也是指操作系统跟 IO 设备交互式不同的方式,我在补操作系统的知识,有的地方说的可能不对。花点时间补补吧,挺有意思的。
    Leonard
        16
    Leonard  
       2022-03-07 14:21:57 +08:00
    @villivateur #10 嘴巴自己就可以 io
    bigbyto
        17
    bigbyto  
       2022-03-07 14:25:25 +08:00   1
    我尝试回答一下,这问题其实不好解释。I/O 其实就是指输入和输出,它本身的定义是比较抽象的,我贴一段维基百科的定义:

    In computing, input/output (I/O, or informally io or IO) is the communication between an information processing system, such as a computer, and the outside world, possibly a human or another information processing system. Inputs are the signals or data received by the system and outputs are the signals or data sent from it.

    我大概翻译一下:在计算机领域,IO 是指信息系统(比如计算机)和外部世界之间的通信,这个"外部"有可能是人类,或者另外一个计算机。输入(Input)是指系统接收的信号或数据,输出(Output)是指系统发出的信号或数据。
    Ref: https://en.wikipedia.org/wiki/Input/output

    如果用 f 来表示 information processing system ,那么 IO 可以用下面公示表示
    f(I) = O

    通过上面定义可以知道 I/O 就是外部世界跟系统的一种通信,我们日常生活中的 I/O 设备很多,比如鼠标、键盘等都是属于 I/O 设备。而我们平时经常说的,大多是指文件 I/O ,网络 I/O ,它们所指的是程序跟磁盘,网卡之间的通信。
    duke807
        18
    duke807  
       2022-03-07 14:41:51 +08:00 via Android   1
    我再充一下吧,其程域的 io 和底 cpu 架有一定。

    arm mips riscv 等 risc 架的芯片(精指令集),ram 、storage 、gpio 等各 peripheral 都是映射到一的地址空( address space ),的地址就可以 ram 、storage 和各 peripheral 外,於件有 io 的法。

    然而,於 x86 x64 的 pc cpu ,是 cisc 架(指令集),指令集 很, ram 和控制 peripheral 外要用不同的 cpu 指令,其中 peripheral 各外的指令的名字叫做 io 指令,所以後硬、什的,也就之 io 操作了。(而 ram 不是 io 指令,所以不能之 io 操作。)
    seagrass
        19
    seagrass  
       2022-03-07 14:44:08 +08:00 via iPhone   1
    I/O 是一个高层次的抽象,可以理解为程序和外界的通信。

    外界可以是其他程序,也可以是人类。

    任何程序(指有意义的),都是获取输入,产生输出。
    zhujinliang
        20
    zhujinliang  
       2022-03-07 14:50:11 +08:00 via iPhone
    I/O 就是南桥负责的东西
    cpstar
        21
    cpstar  
       2022-03-07 15:04:48 +08:00   1
    你们这么讲下去,不得把计算机体系结构讲一遍啊,LZ 更晕了。当然如果要补充知识,当然还是得补充这些基础知识的,而且 OP 最后两个问题,也确实是科班内容。

    按照冯诺伊曼体系结构,计算机使用存储计算模型,存储单元向计算单元提供数据,计算完的数据再回到存储单元,这便是 input 和 output ,然后理论上的存储单元在实践中,成为了很多东西,比如内存、硬盘、网络,比如键盘、鼠标、显示器等等。你写一个程序,甚至程序本身,就是先从外部存储器调入到内部存储器中,再加载到核心计算单元的高速缓存中,然后加加减减乘乘除除,以及逻辑运算,得出来一个结果,再一级一级返回,最终用一些东西呈现出来。

    JAVA 中的 IO ,封装就比较完善了,但是这个完善是基于 JAVA 核心的,包括了很多 JAVA 不能做到的需要用 C 做到的 IO 内容,以及在此之上又用 JAVA 二次封装的很多东西,再以及一些组织和个人基于此再再次封装的更多功能的 API 包。
    sflypig
        22
    sflypig  
       2022-03-07 18:25:51 +08:00   1
    所有运行的程序本质都是=指令+数据,cpu 只会去执行预定义好的机器指令,根据机器指令去运算数据。所有的数据都需要从内存读取到 cpu 内部的寄存器才能被 cpu 的运算器运算。

    所以运行的程序的数据起码需要在内存中,cpu 才会通过指令可以直接读取访问到。而我们所知,现实的数据都是存在硬盘,或者经过网络传输。

    从硬盘读取数据到内存和从内存写到数据到磁盘 就是磁盘 IO 的过程,从网络接口读取数据到内存和从内存写数据到网络接口 就是网络 IO 的过程,站在内存的视角,这两者对内存来说就是数据 INPUT/OUTPUT 。

    所以 IO 到底是什么,它是一种行为,就是读取和写入数据到某个地方。关于这种行为如何实现,本质还是接口和指令的一层层封装,比如你的程序调用 netty 之类的网络库,库里最后会调用操作系统提供的 io 接口,操作系统提供的 io 接口会翻译成机器指令操作硬件。

    --------
    程序调用 netty 之类的网络库,内部发生的事情这个应该看 netty 的代码
    库里最后会调用操作系统提供的 io 接口,之后发生什么事情,建议学习大学计算机课程 操作系统
    操作系统提供的 io 接口会翻译成机器指令操作硬件,如何翻译成机器指令操作硬件,建议学习大学计算机课程 计算机组成原理
    night98
        23
    night98  
       2022-03-08 00:09:13 +08:00
    一个输入,一个输出,
    啥意思,输入就是从某个地方拿进内存,输出就是从内存拿到别的地方去,你大致就这么理解就行了,什么网络 io 文件 io 基本上都是这个套路,键盘和显示器差不多也是这么个套路
    zmqiang
        24
    zmqiang  
       2022-03-08 10:10:15 +08:00
    看到已经有很多专业的解释了,我这边提供一个比喻:

    我们日常的程序指令是通过 CPU 执行的,就像是显示工厂里的一个车间,按照操作步骤进行产品的组装工作。一些组装的原料和成品,放在工厂自己的仓库里,这个类似计算机里的硬盘。还有一些原料和成品是通过外面的公司提供的,这个就类似计算机里的网络。

    而 IO ,指的就是车间和本地仓库或者外面公司交互的过程,也就是现实中的物流系统。最大的特点是慢。nio 、netty 这些概念相当于一个专门搞物流的人,存在的意义就是怎么样合理安排物流,尽量减少对车间工作的影响。

    IO 本身不是一个实体,也不是一个复杂概念,只是对一个特定过程的称呼,我感觉本身没什么好了解。但是如何慢的 IO 和快的 CPU 进行统筹,降低 IO 对系统的影响,这里面是有很多技巧的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5533 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:42 PVG 09:42 LAX 17:42 JFK 20:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86