什么是IO

IO简述

0. 前言

编程中最重要的三个部分,一个是 cpu, 一个是内存条,还有一个就是硬盘和网卡,硬盘和网卡对应的就是IO。分别是文件IO和网络IO。

1. 本篇目录

  • 硬盘,网卡,套接字

  • IO 相关的系统调用

  • Java的NIO

2. 硬盘,网卡,套接字

文件IO和网络IO是最主要的俩种IO方式。

磁盘中有一个物理单位,叫做块。一块往往就是4K。

另外的一个概念是扇区,扇区是操作系统组织定义的一个抽象的概念。一个扇区至少有一个块组成。一般来说,现在一个扇区的大小也是一个块的大小,也是4K。iNode 是文件管理中的一个非常重要的概念。

什么是套接字呢?
在编程中,更多指的是TCP的套接字,也就是一个 TCP 的连接。

3. IO 相关的系统调用

编程语言没有魔法,全都依赖操作系统的支持,其中最强大的支持莫过于系统调用。

可以使用 strace 查看进程的系统调用。运行方式为:

  • strace -p pid

  • strace 程序运行指令

运行这个命令必须记住的几个参数:

  • -f 同时追踪子线程或者子进程的系统调用

  • -e 过滤追踪的系统调用类型

  • -o 将结果输出到文件

4. Java的NIO

很少自己直接写NIO,但是却一直在用。因为netty, tomcat 等基础的网络框架都在用NIO。1.7 之前是NIO。1.7 以后是 AIO 或者 NIO2。

NIO 中最重要的三个概念, selector, channel ,buffer。

  • buffer 其实就是一个数组。在Java中,封装了8种数据类型的buffer,像 IntBuffer等。

  • channel 其实就是一个入口。比如说把一个文件声明为channel。意思是如果要读这个文件,就把这个文件的内容读取到这个buffer里。

  • selector: 更多用在网络编程。

鸣谢

IO

你可能感兴趣的:(现代操作系统,Linux学习,网络,linux,服务器)