{博学谷学习记录} 超强总结,用心分享|狂野架构师-网络IO(同步非阻塞IO)

本文介绍了非阻塞IO的概念,通过fcntl函数将socket设置为非阻塞状态,强调了非阻塞的特点——在无数据时直接返回。同步非阻塞IO需要应用程序轮询检查数据。接着讨论了IO多路复用模型,如select、poll和epoll,这些机制能检测socket的可读写状态,减少无意义的系统调用。
摘要由CSDN通过智能技术生成

目录

1 同步非阻塞IO介绍

1,1 非阻塞IO介绍

1.2 非阻塞的特点

2,同步非阻塞IO的执行流程

3 非阻塞IO注意事项

4 IO多路复用介绍

4.1 IO多路复用模型概述

4.2 IO多路复用模型下的IO模型分类

总结:


本章节主要为大家介绍网络IO非阻塞及非阻塞IO多路复用

1 同步非阻塞IO介绍

1,1 非阻塞IO介绍

阻塞是由于socket文件的状态标识 默认是阻塞的,

通过函数进行查看

函数 man 2 recvfrom 进一步查看该函数的描述DESCRIPTION,在该函数中告诉我们查看fcntl 函数,我们进一步查看fcntl 函数 man 2 fcntl 查看该函数的DESCRIPTION,其中有一段是描述文件状态标志的fcntl(5, F_SETFL, O_RDWR|O_NONBLOCK) = 0 将socket设置为非阻塞

通过给fcntl函数传递参数来指定该socket为非阻塞的socket

通过以上介绍得知 阻塞和非阻塞时通过socket的状态来区分

1.2 非阻塞的特点

应用程序调用read等系统函数获取数据但没有数据时,直接返回,不必等待数据的到来,我们的应用程序是不需要等待数据的到来的,但是操作系统的内核还是需要等待处理的。

2,同步非阻塞IO的执行流程

 3 非阻塞IO注意事项

同步非阻塞的特点是应用程序调用read等系统函数获取数据但没有数据时,直接返回

因为发起read调用且没有数据时直接就返回了,此时客户端socket向服务端发送了数据单我们的应用程序不知道的,这就是个问题所以同步非阻塞的socket需要在应用程序层面做一个read调用的轮询操作,例如 while(true){}来部简短的向内核缓冲区中去获取数据,直至获取到当内核缓冲区获取到数据以后,操作系统将数据从内核缓冲区拷贝到用户空间的过程也是是阻塞的。

4 IO多路复用介绍

4.1 IO多路复用模型概述

IO多路复用模型是一类IO模型的统称,在这一类模型下有不同的系统函数来帮助我们解决相应的问题有select模型,poll模型,epoll模型等等。

4.2 IO多路复用模型下的IO模型分类

IO多路复用模型下的IO模型分类IO多路复用提供了几种不同模型的不同系统调用函数可以用来检测socket的可读写状态。

select 平台一致性会好一些

poll

epoll  模型在linux上是比较成熟的,windows上是不行的

kqueue (K Q)

总结:

阻塞IO和非阻塞IO存在的共同问题:

应用程序不知道socket什么时候有数据了,所以当应用程序调用了read等系统函数在没有数据到来时,阻塞IO选择等待,非阻塞IO选择直接返回然后下次轮询能不能有一种方式知道socket中数据是否准备好了,准备好了再调用read等函数去读取数据,否则不发起读取数据的操作!!!

IO多路复可以为我们来解决这些问题

这就是IO多路复用为我们解决的问题检测socket数据状态,有效减少无意义的系统调用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值