I/O原理篇
1.计算机组成原理(linux)
- 内核,给程序暴露调用,调用叫系统调用
- cpu,内存,磁盘,网卡这些概念都不用说
下面看一个图
- 如上图所示,用qq,java程序等举例,当你开启qq或者想读取一个文件时,内核首先将qq的执行代码加载到内存中,并且在中继向量表中维护一份中继向量数据(key-value)用于指令重排。
- 当同时有个java程序输出了一段话System.out.print(“aaaaa”),内核调用wirte(“aaaaa”,0x80)的方法,cpu收到了int(指令)去中断向量表中找对应的执行指令(根据0x80),找到后执行该指令输出“aaaa”
cpu的指令切换(时间片)是靠一个晶片的硬件来实现的,它是基于时间的频率振动(时钟中断),用于切换哪个程序的执行。
I/O
一切IO的演变都是基于内核的改变
1.BIO 最开始的内核就是BIO模型,也就是每一连接,每线程。当并发量起来之后,假设有一万个连接就需要创建一万个线程,这种就会导致内存的不够用。
2.NIO accept和receive都不需要阻塞,通过内核的fctnl=nonblock设置
3.多路复用,通过selector来实现线程的复用。