网络IO、Linux 网络模型 、同步、异步、IO多路复用
2018-03-07 18:01
381 查看
网络IO、Linux 网络IO模型 、同步、异步、IO多路复用
首先:了解 五种网络IO模型
阻塞IO
非阻塞IO
IO多路复用
信号驱动IO
异步IO
前四种是属于同步的,后一种是属于异步的。
详细描述:
阻塞IO:进程会等待任务完成,例如是对于某个套接字的内容读取等。然后在进行其他的操作
非阻塞IO:进程不会一直等待某个任务执行完成,而是先去执行其他操作,然后不断的去查看任务的执行情况,进而处理
I/O多路复用:进程可能需要去处理很多任务,这些任务一个一个去处理太慢,所以就同时去处理,然后以某种方式分别对不同任务的结果进行处理,这里的某种方式主要是有两类:select/poll 和 epoll,两个明显区别是前者是主要以轮训的方式进行检查任务的执行情况,而后者主要是通过对已经获得结果的任务进行处理,例如:poll会在用户态和内核态之间多次复制数据,并且对设备至少做一次加入和删除的操作,导致性能低下,而epoll则是提供callback,在某个设备就绪之后,才会进行一下操作。
信号驱动IO: 是应用进程告知内核开始进行操作,然后这是不阻塞,操作完成之后通过某个信号通知应用进程进行IO,然后由进程进行操作,操作的这个过程是阻塞的。看起来和接下来的异步IO很像,其区别就是,内核通知应用的时机不同,信号驱动IO是在可以进行IO的时候通知进程,而异步IO是在IO完成之后通知应用,但是他们都不阻塞!!!
异步IO: 和信号驱动IO类似,在内核IO完成之后调用相应的处理程序。
一张图:
关于同步IO和异步IO的解释:
同步I/O操作(synchronous I/O operation)导致请求进程阻塞,直到I/O操作完成。
异步I/O操作(asynchronous I/O operation)不导致请求进程阻塞。
举个例子,在tornado应用中,如果启动一个tornado的服务进程,然后,对于某个请求的处理函数中进行了time.sleep操作来模拟耗时操作,那么当有其他请求进来的时候,会不被处理,直到之前的请求处理完成,也就是这个服务进程被阻塞了。
然而呢,可以使用tornado.gen.sleep()模拟耗时操作,其他请求进来就能立刻被处理,这时就是异步状态了
几个优秀链接:
知乎各路大神的讨论:https://www.cnblogs.com/nufangrensheng/p/3588690.html
一个博友的总结:https://www.cnblogs.com/nufangrensheng/p/3588690.html
经典的五张图片:
没啦!。。
相关文章推荐
- 同步异步 阻塞非阻塞 Linux网络io模型
- 网络IO模型及同步、异步与阻塞、非阻塞的理解
- (转)同步异步/阻塞非阻塞 和 5种linux网络通信模型
- 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型
- 网络IO模型(同步异步,阻塞非阻塞)
- 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型
- 同步异步阻塞非阻塞网络IO模型select/epoll
- Linux 网络IO: 同步、异步、阻塞与非阻塞
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- IO模型介绍 以及同步异步阻塞非阻塞的区别
- linux网络编程——多路复用select模型简例
- 网络IO之阻塞、非阻塞、同步、异步总结
- linux阻塞与非阻塞,同步与异步、I/O模型
- IO模型:同步、异步、阻塞、非阻塞
- 简明网络I/O模型---同步异步阻塞非阻塞之惑
- 网络IO之阻塞、非阻塞、同步、异步总结