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

文章介绍了网络IO的基本概念,包括内存空间的划分、网络数据的传输路径,以及Linux系统中的各种IO模型,如同步阻塞IO、同步非阻塞IO、IO多路复用、信号驱动IO和异步IO。重点讨论了同步阻塞IO的工作原理和产生的原因,指出其对程序性能的影响,并预告了后续将探讨的其他IO模型。
摘要由CSDN通过智能技术生成

目录

1 网络IO介绍

1.1 内存空间的概念:

1.2 网络IO的由来

2 IO模型的概念

3 linux系统的中IO模型介绍

3.1 同步阻塞IO

3.2 同步非阻塞IO

3.3 IO多路复用:比较流行

3.4  信号驱动IO: 在实现上有他一定的复杂度,我们基本上很少用到他

3.5  异步IO; 未来的发展趋势

 4 同步阻塞IO产生的原因

4.1 小结

总结:


本节课程主要给大家讲解网络IO的概念

1 网络IO介绍

1.1 内存空间的概念:

我们的应用程序是不能直接操作计算机的需要通过内核来进行中转由内核向上提供api,我们应用程序调用从而达到中转的效果

我们的应用程序刚开始启动的时候就是一个进程,进程的话操作系统就会为我们的进程分配空间和相应的资源以内存资源为例,操作系统为我们分配的内存空间,内存空间分为两部分

一个是内核缓冲区空间,一个是用户空间,

内核缓冲区空间用于存储内核给我们处理任务所产生的任务数据,

用户空间就是应用程序占用的空间,比如我们启动一个jvm,就会在用户空间中开辟相应的堆栈信息。

1.2 网络IO的由来

网络数据到来后先存到网卡的缓冲区容量很小,最后有操作系统内部中转到内核缓冲区,再等待应用程序收走比如应用程序调用内核的Api从操作系统中的某一个socket读取数据,

情况一,如果内核的缓冲区中的某一个socket缓冲区空间有数据那么操作系统就会将socker缓冲区的数据拷贝到用户空间,数据到用户空间以后我们的程序就可以获取该数据进行使用了

情况二,内核缓冲区中没有数据,那么内核就要等待数据的到来,数据来了以后在由内核将数据读取到内核缓冲区中,数据到缓冲区以后在由缓冲区将数据拷贝到用户空间

在上面的执行流程中涉及到了几个拷贝的关键字,

IO就是数据拷贝的过程,我们称之为IO

从网络中读取到的数据称之为网络IO

2 IO模型的概念

根据读写数据时的不同表现形式,会有不同的IO模型

比如,我们调用内核的api读取某个socket内核缓冲区中的数据如果缓冲区中没有数据,那么IO就会有多种做法了

1,没有数据那就一直等,直到有数据到来

2,没有数据那就不管了,过一会再来获取等等

这种IO的多种表现形式就是不同的IO模型

3 linux系统的中IO模型介绍

 数据拷贝的过程中,IO模型的不同,数据拷贝的表现形式不同

3.1 同步阻塞IO

             下面给大家进行讲解

3.2 同步非阻塞IO

             下一章节中进行介绍

3.3 IO多路复用:比较流行

             下一章节中进行介绍

3.4  信号驱动IO: 在实现上有他一定的复杂度,我们基本上很少用到他

            下一章节中进行介绍

3.5  异步IO; 未来的发展趋势

           下一章节中进行介绍

 4 同步阻塞IO产生的原因

阻塞:

字面意思是应用程序调用系统函数获取数据但还没有数据时(数据还没返回时)要等待数据的到来 recvfrom 获取数据内核缓冲区没有数据它不会进行返回,会一直等
 

当客户端将数据发送到网路中我们服务端的内核先接收到数据并存放在内核缓冲区中,如果我们的应用程序不主动调取recvfrom 函数从内核缓冲区中获取数据那数据会一直在内核缓冲区中,我们的应用程序是拿不到数据的 我们的应用程序要想从内核空间获取数据,需要主动调用recvfrom方法,将内核缓冲区的数据同步到用户空间,这个主动调用函数获取数据到用户空间的过程就是同步模型IO异步模型IO是不需要我们主动调的,内核会自动将数据同步到应用程序。

阻塞的原因是什么:

 阻塞的状态跟我们调用的函数没有关系当我们查看linux系统网络编程的帮助文档中发现,产生阻塞的原因是我们的socker本身就是阻塞的,无论我们调用哪个函数他都是阻塞的。

我们可以 通过命令的形式来查看 同步阻塞模型的帮助文档 man recvfrom

4.1 小结

结论:

跟调用的函数无关,与socket文件本身的状态标志有关 同步阻塞IO:当前socket文件的状态标志是阻塞的如果我们想要将网络编程的socker变成非阻塞我,我们需要将socker文件的状态标识修改成非阻塞的即可。

5,同步阻塞IO全流程介绍

    

总结:

同步阻塞IO的对程序的性能有较大的影响

线程资源耗费严重,阻塞的特性导致线程利用率不高,难以支撑高性能高并发且有海量连接的服务端 后面我会给大家介绍其他形式的IO模型介绍方案

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值