1.框架中封装了NIO实现高性能的网络通信,例如redis,nginx,tomcat等都利用了NIO。

2.使用BIO的问题在于,如果想实现多人通信,需要为每个客户端创建一个对应的服务线程来实现,或者使用双重循环,后者需要程序执行到制定的地方新的客户端才能连接完成实现数据的通信。

3.即使使用多线程来完成也会存在问题,计算机中的线程数量不是越多越好,线程需要大量的用户态到内核态的切换。使用这种方式创建的线程有可能没有什么任务可做但是依旧需要占用着CPU资源;

4.于是就引入了NIO,NIO的实现的模型:客户端想要建立连接时,不会立刻为其分配一个线程,建立连接,如果立刻分配了线程去处理就形成了BIO。实际上,他会先使用一个记录数据的本子记录有哪些客户端需要建立连接,使用多路复用器轮询的访问这些客户端中哪些需要进行通信的,选择合适的客户端使用一个线程和服务端进行通行。

5.基本概念

CPU的两个状态:分为用户态和内核态;原因是限制不同程序之间的访问的权限,防止从其他程序获取内存数据,以对外复制发送信息;

内核态:CPU可以访问所有的数据,包括外设,内存等信息,也可以将自己从一个程序切换至另外一个程序;内核调用cpu 访问其他的设备获取信息,这种是内核态。

用户态:占用cpu的能力被剥夺,不能访问外围设备,只能访问授权内存信息;程序运行时申请的资源可以访问,没有抢夺cpu的权限,需要使用内核态的方式完成。于是就需要内核态与用户态之间的模式切换,这个切换的过程就需要操作系统来调度。

什么时候发生内核态,用户态之间的模式切换:当发生系统调用,异常,中断等就会发生模式的切换;内核态执行完成之后会回退至用户态;

6.系统调用: 由操作系统实现的所有系统调用所构成的集合称为API,比如调用一个api创建一个文件等。

常见的系统调用有:创建一个线程:fork,创建文件:creat chmod,chown,read,write,close一个文件等; 信息相关的:get,通信相关的pipe

7.系统中断:(中断的好处之一就是可以进行用户态内核态之间的切换,优先处理优先级别高的进程等作用)

中断源:可以理解为让其他进程中断自己当前所做的事的进程;(能够引发中断的原因) 中断请求:让别的程序中断后所要执行的指令或者动作; 比如进程正在读文件: 中断响应:响应系统中断 中断服务子程序:执行中断源发出的中断请求; 中断返回:中断服务子程序执行完成之后返回至主线程;

8.中断分类:

机器故障的中断:如掉电

程序性中断:1.程序性错错误(除数为0);2.产生特殊的运算结果:(定点溢出) 3.预先跟踪的事件比如程序调试;

输入输出中断: 例如IO中断;

外中断:控制台的中断(计时器,时钟等)

9.系统中断的好处是: 分时操作:解决Cpu的快速处理以及慢速度的IO设备之间的关系问题。

实时处理:word中可以实现一边输入,一边做拼写检查;

故障处理:可以实现优先处理故障;

10.DMA:直接存储器访问,负责执行cpuI/O输入输出的请求,DMA负责将网卡,磁盘,等读取信息至内存,读取完成之后发送中断信号;

DMA能够负责将不同处理速度的设备与cpu之间进行沟通,由DMA负责利用总线将数据拷贝至内存,期间,cpu需要将总线的控制权限转交给总线,在结束DMA传输之后,DMA控制器需要立刻将总线的控制权转交给Cpu,发出中断信号,通知cpu进行处理。

11.位图:一种数据结构,比如使用一个int类型的数据表示一个月内的某一天是否打卡了,这时就可以使用位图,和一个1与运算检查是否是打了卡。