根据unix网络编程对I/O模型的分类,有5中I/O模型:
1、阻塞I/O模型:阻塞意思是进程在从调用recvfrom开始到它返回的整段时间内都是被阻塞,其他进程不可打断;
2、非阻塞I/O模型:recevfrom从应用层到内核的时候,如果缓冲区没有数据的话,直接返回一个EWOULDLOCK错误,一般都对非阻塞I/O模型进行轮训检查这个状态,看内核是不是有数据到来。
3、I/O复用模型:
4、信号驱动I/O模型:
5、异步I/O模型:
从以上介绍的五种模型中,个人解读是,五种模型其实是两个类型,阻塞和非阻塞。
在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。
I/O多路复用技术的应用场景:
服务器需要同时处理多个处于监听状态或者多个链接状态的套接字;
服务器需要同时处理多种网络协议的套接字;
书中所说的,只要对这些底层有所理解即可。
按我解读,做好tcp server,需要理解好操作系统、特别是底层网络相关的内容,这样,才能写出健壮的软件。毕竟是对系统函数进行调用,如果对底层不理解透彻,有时候遇到技术细节,是无法准确处理的。
这里遗留下几个问题:
1、对于网络应用开发,这些I/O模型有什么用处?
2、对于当前开发的高并发性服务器来说,应该选用什么I/O模型?