服务器模型
服务器编程框架
I/O模型
socket在创建时默认是阻塞的,针对阻塞I/O的系统调用可能因为无法立即完成而被系统挂起,直到等待的事件发生为止。比如客户端connect服务器,如果没有收到服务器返回的确认报文段,就被挂起,直到收到报文并唤醒connect调用。socket的基础API中,被阻塞的系统调用有accept、send、recv和connect。
对于非阻塞I/O执行的系统调用总是立即返回,不管事件是否发生。如果没有发生返回-1,和出错的返回值一样,但是可以通过errno来区分。对于accept send recv而言,事件未发生通常被设置成EAGAIN(再来一次)或者EWOULDBLOCK(期望阻塞),对于connect则是EINPROGRESS(在处理中)。
I/O复用函数有select poll和epoll_wait,它们本身是阻塞的,它们能提高程序效率的原因在于具有同时监听多个I/O事件的能力。
两种高效的事件处理模式
两种高效的并发模式
有限状态机
其实就是switch数据结构