IO模型
2018-09-06 本文已影响0人
kevinfuture
去年自己手绘的一些关于io模型的图,暂未加上之前的描述文字,有时间逐步加上文字描述!!!


阻塞IO模型:系统会一直阻塞在数据copy方面,直到内核缓冲区有数据了,然后进行copy,才会解除阻塞,这样其实会一直阻塞下去

非阻塞IO模型:与阻塞io不同的是,这里不再阻塞在调用上,而是用一个轮询查看是否需要进行数据copy,大家可能有疑问,这样还不如阻塞在copy阶段 干嘛一直占用cpu。其实是这样的,对比来看,阻塞io的话用户线程是无法释放的,而非阻塞io则可以返回一个error,告诉你没有数据, 那么你可以去做相应的处理

信号驱动IO模型:信号通知用户进程何时开始一个IO操作

异步IO模型:与信号驱动的区别在于:信号驱动由内核告知用户进程何时可以进行一次i/o操作;异步I/O由内核告知何时I/O完成

多路复用IO模型:现在市面上,咱们耳熟能详的异步事件驱动的io技术有netty、nginx、nodejs等等,所以现在对这类技术的呼声非常高
像netty,官方号称,在他们机器上测试能达到12 -13万的qps。关于这里的实现方式,大家可以看一下netty的代码,有几种是实现方式
单线程、多线程、主从多线程的Reactor模式。
