一、服务器基本框架:
IO单元处理客户端连接,读写网络数据,逻辑单元,业务线程,请求队列是各个线程之间通信的方式
IO分为同步IO和异步IO:
同步IO是,IO就绪(比如socket收到了客户端的数据)就会通知程序,异步IO只有在事件完成后才会通知程序。比如使用read(),需要两个步骤:
1)内核缓冲区等待数据的接收
2)将数据从内核缓冲区copy到应用缓冲区
同步IO会在1)完成后通知进程,而异步IO会在2)结束后通知进程。
阻塞IO会在1)中等待直到内核缓冲区收到数据,非阻塞IO在1)中会立即返回,并且不断去询问是否收到数据。
reactor模式:
要求IO单元只负责监听文件描述符是否发生了变化,有的话立即通知逻辑单元,利用逻辑单元进行读写
proactor模式:
将IO操作都交给IO单元完成(包括读写)
并发模型中的同步指的是函数按照代码顺序执行,中断后一直阻塞,异步是函数执行需要系统事件(中断、信号)。
**LT:**如果一个套接字发生了变化,程序一直没有处理,内核会一直通知,直到处理了该事件。例如一个套接字,接收到了数据,如果该套接字缓冲区一直有数据没读完,就会一直通知进程去接收
**ET:**如果一个套接字发生了变化,内核只会通知一次该事件。例如一个进程接收到了数据,内核只会通知进程一次,因此需要循环把数据读完