I/o 多种模型

1.在网络环境下,I/O分为两个步骤:等待、数据搬迁。所以,为了提高效率,必须降等待时间降低。因此发展出5种 I/O 模型。

同步阻塞I/O模型
非阻塞I/O模型
多路复用I/O模型
信号I/O模型
异步异步I/O模型

2.在详细了解之前,先补充几点系统知识。

  1.    内核:计算机系统的基础部分。为各个应用程序提供对硬件安全访问支持的一部分软件。
  2.  recvfrom:从已连接套接口上获取数据,并捕获数据发送源的地址。
  3. 内存I/O 
    网络I/O我们平常说的
    磁盘I/O
  4. 同步和异步:其实是指CPU时间片的利用,主要看请求发起方对消息结果的获取是再主动发起的还是被动通知的。

3.阻塞I/O模型:当用户进程发起 recvfrom系统调用,内核开始准备数据。对于网路I/O来说,很多时候内核没有足够的数据(完整的udp包)。这个时候,应用程序就被阻塞了。当数据准备好后,它就会将数据拷贝到用户内存,然后返回结果,整个进程解除阻塞状态。

优点进程阻塞挂起,不消耗cpu资源,及时响应每个操作
编码难度小
适合并发量小的网路应用开发
缺点不适合并发大的应用,因为一个请求I/O会阻塞应用
需要为每个请求分配一个线程以及时响应,系统开销大

4.非阻塞型

当用户发起read操作后,如果内核数据还没有准备好,那么会立即返回error,不会阻塞应用进程。用户进程接收到error后会再次发送read请求。如此往复循环,直到数据 进入用户内存。

特点用户进程需要不断的轮询内核数据准备好没有
缺点反复轮询调用,消耗cpu资源
响应不是很及时

5.多路复用模型

多个进程的I/O可以注册到一个复用器selector上。当用户进程调用selector时,复用器会监控所有注册过来的I/O。如果没有一个I/O对应的内核缓存准好了数据,那么select调用进程会被阻塞。 多个进程注册I/O后,只有一个select调用进程会被阻塞。

多路复用和阻塞模型实际没有多大区别,事实上,性能在某些情况下更加差些。因为多路复用要两次系统调用(select和recvfrom),而阻塞模型只有一次。但是,复用器的优势是它可以同时处理多个请求。所以如果处理的连接数不多,使用多路复用不一定比使用多线程的阻塞型I/O性能更好。

6.异步I/O

用户进程发起aio_read操作后,给内核传递和read相同的信息,并且告诉内核整个操作完成时如何通知用户进程立刻进行其他操作。(说白了就是回调)。从内核的角度,当他收到aio_read之后,会立刻返回,不会对进程产生任何阻塞。内核数据准备好后,将数据拷贝到用户进程。并立刻通知用户进程。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值