复习知识点

1、http和https区别

2、TCP、UDP区别

3、IO模型

阻塞IO模型

进程发起IO系统调用后,进程被阻塞,转到内核空间处理,整个IO处理完毕后返回进程,操作成功则进程获取到数据。

非阻塞IO模型

和阻塞IO模型相比,非阻塞IO模型在内核数据没准备好,需要进程阻塞的时候,就返回一个错误,以使得进程不被阻塞。

(1)进程发起IO系统调用后,如果内核缓冲区没有数据,需要到IO设备中读取,进程返回一个错误而不会被阻塞。
(2)进程发起IO系统调用后,如果内核缓冲区有数据,内核就会把数据返回进程。

IO复用模型(Select,Poll和Epoll

多个进程的IO可以注册到一个复用器(select)上,然后用一个进程调用该select,select会监听所有注册进来的IO。

如果select监听的IO在内核缓冲区都没有可读数据,select调用进程会被阻塞;而当任一IO在内核缓冲区中有可读数据时,select调用就会返回;而后select调用进程可以自己或通知另外的进程(注册进程)来再次发起读取IO,读取内核中准备好的数据。

(1)Select:注册IO、阻塞扫描,监听的IO最大连接数不能多于FD_ SIZE(1024)。

(2)Poll:原理和Select相似,没有数量限制,但IO数量大,扫描线性性能下降。

(3)Epoll :事件驱动不阻塞,mmap实现内核与用户空间的消息传递,数量很大,Linux2.6后内核支持。

poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。

epoll的优点:

(1)没有最大并发连接的限制,能打开的FD的上限远大于1024(1G的内存上能监听约10万个端口);

(2)效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。只有活跃可用的FD才会调用callback函数;即Epoll最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,Epoll的效率就会远远高于select和poll。

(3)内存拷贝,利用mmap()文件映射内存加速与内核空间的消息传递;即epoll使用mmap减少复制开销。

信号驱动IO模型

当进程发起一个IO操作,会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。

异步IO模型

当进程发起一个IO操作,进程返回(不阻塞),但也不能返回结果。内核把整个IO处理完后,会通知进程结果,如果IO操作成功则进程直接获取到数据。

总结(五种模型区别)

在这里插入图片描述

  IO模型的形象理解

来源参考:IO模型 | 常见的五种IO模型介绍_静静子♡的博客-优快云博客_io模型

活动:演唱会

角色1:举办商 售票业务员;角色2:黄牛;角色3:小明;角色4:送票快递员

(1)同步阻塞:

小明从家里面先到演唱会现场问售票业务员买票,但是票还没出来,IO三天以后才出来,小明直接打了个地铺睡在举办商售票大厅,一直等票出来,然后买票。

(2)同步非阻塞 : socket可以设置non-blocking

小明从家里面先到演唱会现场问售票业务员买票,但是票还没出来,然后小明走了,办理其他事情去了,然后过了2个小时,又去举办商售票大厅买票来了,如果票还没有出来,小明又先去办其他事情了,重复上面的操作,直到有票可以买。

(3)i/o复用 java selector() => linux epoll_wait() 同步非阻塞I/O

小明想买票看演唱会,都直接给黄牛(selector/epoll)打电话了,说帮我留意买个票,票买了通知我,我自己去取(当我接到黄牛的电话时,我需要花费整个路成的时间去读这个数据,买拿这个票),那么票没出来之前,小明完全可以做自己的事情。

(4)信号i/o

小明想买票看演唱会,给举办商售票业务员说,给你留个电话,有票了请你给我打个电话通知一下,(是看人家操作系统提不提供这种功能,Linux提供,windows没有这种机制),我自己再来买票(小明完全可以做自己的事情,但是票还是需要小明自己去拿的)。

(5)异步非阻塞i/o Linux aio_read aio_write

小明想买票看演唱会,给举办商售票业务员说(异步非阻塞i/o)打电话了,给你留个地址,有票了请通知快递员,把这张票送到这个地址来,当小明听到敲门声,看见快递员,就知道票好了,而且知道票好了的时候,票已经到他手上了,票不用小明自己去取(应用不用自己再去read数据了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值