[求解] io 到底是什么

2022-03-07 10:51:54 +08:00
 RedBeanIce

背景

1 ,我的计网较差

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

3 ,普通 Java 一枚

我理解的

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

2 ,nio 与 netty 有一些理解

3 ,

求解

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

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

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

理论上所有的东西都是 IO

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

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

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

見這標題第一反應是 io 口,芯片的管腳。。。
AllenHua
2022-03-07 14:06:27 +08:00
不管是 cpu 内部的寄存器还是内存(掉电失去数据),还是永久性的 flash 存储设备(比如 hdd 、ssd ),我所理解,IO 的终点都是往这些存储介质中读和写数据。IO 的过程就不那么重要了,殊途同归。
Caturra
2022-03-07 14:10:50 +08:00
既然基础差,那么入门的方法就是补回基础。挑一本操作系统看看就理解了
paradoxs
2022-03-07 14:11:45 +08:00
直接理解为硬盘存储就行了
WIN2333
2022-03-07 14:20:06 +08:00
你需要补补操作系统的知识,就是输入输出,你跟硬盘交互需要输入输出,你的显示器,键盘等等,皆可称为 IO 设备。cpu 执行的是一条条指令,与 IO 设备交互属于特权指令,操作系统需要进入内核态,然后等待 IO 设备响应。Java 里面提到的不同的 IO 模式其实也是指操作系统跟 IO 设备交互式不同的方式,我在补操作系统的知识,有的地方说的可能不对。花点时间补补吧,挺有意思的。
Leonard
2022-03-07 14:21:57 +08:00
@villivateur #10 嘴巴自己就可以 io
bigbyto
2022-03-07 14:25:25 +08:00
我尝试回答一下,这问题其实不好解释。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
2022-03-07 14:41:51 +08:00
我再補充一下吧,其實編程領域的 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 操作。)
whx
2022-03-07 14:44:08 +08:00
I/O 是一个高层次的抽象,可以理解为程序和外界的通信。

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

任何程序(指有意义的),都是获取输入,产生输出。
zhujinliang
2022-03-07 14:50:11 +08:00
I/O 就是南桥负责的东西

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX