操作系统杂项(十)

目录

一、简述socket中select、epoll的使用场景和区别

1、使用场景

2、区别

二、epoll水平触发和边缘触发的区别

三、简述Reactor和Proactor模式

1、Reactor

2、Proactor

3、区别

四、简述同步和异步的区别,阻塞和非阻塞的区别

1、同步与异步

2、阻塞与非阻塞

五、简述BIO和NIO的区别

1、BIO

2、NIO

六、简述5种I/O模型

1、阻塞I/O

2、非阻塞I/O

3、信号驱动I/O

4、I/O多路复用

5、异步I/O

七、简述socket网络编程中客户端和服务端用到哪些函数

1、服务器端函数

2、客户端函数

八、简述网络七层参考模型及每一层的作用


一、简述socket中select、epoll的使用场景和区别

1、使用场景

        select、epoll都是I/O多路复用的机制,应用于高并发的网络编程的场景。I/O多路复用就是通过一种机制,可以监视多个文件描述符,一旦某个文件描述符就绪(一般是读就绪或者写就绪),能够通知应用程序进行相应的读写操作。

2、区别

        (1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时候会很大,而epoll保证了每个fd在整个过程中只会拷贝一次。

        (2)每次调用select都需要在内核遍历传递进来的所有fd,而epoll只需要轮询一次fd集合,同时查看就绪链表中有没有就绪的fd就可以了。

        (3)select支持的文件描述符数量太小了,默认是1024,而epoll没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048。

二、epoll水平触发和边缘触发的区别

        LT模式(水平触发)下,只要这个fd还有数据可读,每次epoll_wait都会返回它的事件,提醒用户程序去操作。

        ET模式(边缘触发)下,它只会提示一次,直到下次再有数据流入之前都不会提升了,无论fd中是否还有数据可读。

三、简述Reactor和Proactor模式

        在高性能的I/O设计中,有两个比较著名的模式:ReactorProactor。其中Reactor模式用于同步I/O,Proactor用于异步I/O操作

1、Reactor

        Reactor模式中读操作的具体步骤为:

        (1)应用程序注册读就需事件和相关联的事件处理器;

        (2)事件分离器等待事件发生;

        (3)当发生读就需事件的时候,事件分离器调用第一步注册的事件处理器;

        (4)事件处理器首先执行实际的读取操作,然后根据读取到的内容进行进一步的处理。

2、Proactor

        Proactor模式中读操作的具体步骤为:

        (1)应用程序初始化一个异步读取操作,然后注册相应的事件处理器,此时事件处理器不关注读取就绪事件,而是关注读取完成事件,这是区别于Reactor的关键;

        (2)事件分离器等待读取操作完成事件;

        (3)在事件分离器等待读取操作完成的时候,操作系统调用内核线程完成读取操作,并将读取的内容放入用户传递过来的缓存区中。这也是区别于Reactor的一点,Proactor中,应用程序需要传递缓存区;

        (4)事件分离器捕获到读取完成事件后,激活应用程序注册的事件处理器,事件处理器直接从缓存区读取数据,而不需要进行实际的读取操作。

3、区别

        从上面看出,Reactor中需要应用程序自己读取或者写入数据,而Proactor模式中,应用程序不需要用户再自己接收数据,直接使用即可,操作系统会将数据从内核拷贝到用户区。   

四、简述同步和异步的区别,阻塞和非阻塞的区别

1、同步与异步

        同步:所有操作都做完,才返回给用户结果。即写完数据库之后,再响应用户,用户体验不好。

        异步:无需等所有操作完成,就响应用户请求。即先响应用户请求再慢慢写数据库,用户体验较好。

2、阻塞与非阻塞

        阻塞:调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地检查这个函数有没有返回,必须等这个函数返回后才可以进行下一个动作。

        非阻塞:非阻塞等待,每隔一段时间就去检查I/O事件是否就绪,没有就绪就可以做其他事情。

五、简述BIO和NIO的区别

1、BIO

        BIO(Blocking I/O):阻塞I/O,调用者调用了某个函数,等待这个函数返回,期间什么也不做,停地检查这个函数有没有返回,必须等这个函数返回后才可以进行下一个动作。

2、NIO

        NIO(New I/O):同时支持阻塞和非阻塞模式,NIO的做法是叫一个线程不断的轮询每个I/O的状态,看是否有I/O的状态发生了改变,从而进行下一步操作。

六、简述5种I/O模型

1、阻塞I/O

        调用者调用了某个函数,等待这个函数返回,期间什么也不做,停地检查这个函数有没有返回,必须等这个函数返回后才可以进行下一个动作。

2、非阻塞I/O

        非阻塞等待,每隔一段时间就去检查I/O事件是否就绪,没有就绪就可以做其他事情。

3、信号驱动I/O

        Linux用套接口进行信号驱动I/O,安装一个信号处理函数,进程继续运行并不阻塞,当I/O事件就绪,进程收到SIGIO信号,然后处理I/O事件。

4、I/O多路复用

        Linux用select、poll函数实现I/O复用模型,这两个函数也会使进程阻塞,但是和阻塞I/O所不同的是这两个函数可以同时阻塞多个I/O操作,而且可以同时对多个读操作、写操作的I/O函数进行检查,直到有数据可以读或者可以写时,才真正调用I/O操作函数。

5、异步I/O

        Linux中,可以调用aio_read函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移和通知的方式,然后立即返回,当内核将数据拷贝到缓冲区后,再通知应用程序,用户可以直接去使用数据。

        前四种模型:阻塞I/O、非阻塞I/O、多路复用I/O和信号驱动I/O都属于同步模式,因为其中真正的I/O操作(函数)都将会阻塞进程,只有异步I/O模型真正实现了I/O操作的异步性。

        异步和同步的区别在于,异步是内核将数据拷贝到用户区,不需要用户再自己接收数据,直接使用即可,而同步是内核通知用户数据到了,然后用户自己调用相应函数去接收数据。

七、简述socket网络编程中客户端和服务端用到哪些函数

1、服务器端函数

        (1)socket创建一个套接字;

        (2)bind绑定ip和port;

        (3)listen使套接字变为可以被动链接;

        (4)accept等待客户端的链接;

        (5)write/read接收发送数据;

        (6)close关闭连接。

2、客户端函数

        (1)创建一个socket,用函数socket();

        (2)bind绑定ip和port;

        (3)连接服务器,用函数connect();

        (4)收发数据,用函数send()和recv(),或read()和write();

        (5)close关闭连接。

八、简述网络七层参考模型及每一层的作用

        如下表:

OSI七层模型功能对应的网络协议TCP/IP四层概念模型
应用层文件传输、文件管理、电子邮件的信息处理HTTP、TFTP、FTP、NFS、WAIS、SMTP应用层
表示层确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密Telnet、Rlogin、SNMP、Gopher应用层
会话层负责在网络中的两节点建立,维持和终止通信SMTP、DNS应用层
传输层定义一些传输数据的协议和端口TCP、UDP传输层
网络层控制子网的运行,如逻辑编址,分组传输,路由选择IP、ICMP、ARP、RARP、AKP、UUCP网络层
数据链路层主要对物理层传输的比特流包装,检测保证数据传输的可靠性,将物理层接收的数据进行MAC(媒体访问控制)地址的封装和解封装FDDI、Ethernrt、Arpanet、PDN、SLIP、PPP、STP、HDLC、SDLC、帧中继数据链路层
物理层定义物理设备的标准,主要对物理连接方式,电气特性,机械特性等制定统一标准IEEE 802.1A、IEEE 802.2到IEEE 802.数据链路层

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Greenplum数据库中常用函数

聚合函数: SUM:计算某一列的总和。例如,SELECT SUM(sales) FROM transactions; 可以计算出transactions表中sales列的总和。AVG:计算某一列的平均值。例如,SELECT AVG(price) FROM products; 可以计算出products表中pr…

数据分析之一:方差分析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言一、数据方差分析原理二、数据方差分析在机器人领域的应用1、单因素方差分析(One-Way ANOVA)2、双因素方差分析(Two-Way ANOVA)3、多因素方差分…

在VS IDE中​​​​​​​搜索所有带有中文的字符串

搜索所有带有中文的字符串 要搜索所有包含中文的字符串,可以使用正则表达式功能来查找包含 中文字符的所有字符串。步骤如下: 1. 打开搜索功能 : o 按 Ctrl Shift F 打开“查找在文件”对话框。 2. 输入正则表达式 : …

RTTI的开启和关闭

RTTI是运行时类型识别,C引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。(多态) 我们使用dynamic_cast就是基于RTTI的,我们可以通过编译器对RTTI进行开启或者关闭,关…

基于ssm+vue医院住院管理系统源码数据库

摘 要 随着时代的发展,医疗设备愈来愈完善,医院也变成人们生活中必不可少的场所。如今,已经2021年了,虽然医院的数量和设备愈加完善,但是老龄人口也越来越多。在如此大的人口压力下,医院住院就变成了一个…

Go 语言任务编排 WaitGroup

WaitGroup 是常用的 Go 同步原语之一,用来做任务编排。它要解决的就是并发-等待的问题: 现在有一个 goroutine A 在检查点 ( checkpoint ) 等待一组 goroutine 全部完成它们的任务,如果这些 goroutine 还没全部完成任务,那么 goroutine A 就会被阻塞在检查点,直到所有的 …

深入分析 Android ContentProvider (五)

文章目录 深入分析 Android ContentProvider (五)ContentProvider 的性能优化和实践案例1. 性能优化技巧1.1. 数据库索引优化示例:添加索引 1.2. 批量操作与事务管理示例:批量插入操作 1.3. 使用异步操作示例:使用 AsyncTask 进行异步查询 1.…

Linux:基础

一、安装 二、 一些组件 2.1 git管理 集中式版本控制系统:版本库是集中存放在中央服务器的,需要时要先从中央服务器取得最新的版本进行修改,修改后再推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作,网速慢的话影响太大。 分布式版本控制系统:分布…

Linux网络-wget命令

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器,主要的作用就是向客户端提供网络…

设计模式14-享元模式

设计模式14-享元模式 由来动机定义与结构代码推导特点享元模式的应用总结优点缺点使用享元模式的注意事项 由来动机 在很多应用中,可能会创建大量相似对象,例如在文字处理器中每个字符对象。在这些场景下,如果每个对象都独立存在&#xff0c…

PyCharm 2024.1.4:一站式教程与新特性解析

简介 PyCharm是由JetBrains开发的一款Python集成开发环境(IDE),自发布以来,凭借其强大的功能、智能的代码补全、广泛的插件支持和用户友好的界面,成为了Python开发者的首选工具之一。无论是数据科学、Web开发还是其他…

Redis - SpringDataRedis - RedisTemplate

目录 概述 创建项目 引入依赖 配置文件 测试代码 测试结果 数据序列化器 自定义RedisTemplate的序列化方式 测试报错 添加依赖后测试 存入一个 String 类型的数据 测试存入一个对象 优化 -- 手动序列化 测试存入一个Hash 总结: 概述 SpringData 是 S…

在 ArchLinux 上编译运行 axmol 引擎

本文将在 Windows 10 上安装 Arch WSL 中编译 axmol 请确保 WSL2 已正确安装 1. 在微软应用商店安装 ArchLinux 2. 打开 Arch,按照提示输入用户名和密码,尽量简单 3. 配置清华源,速度快的起飞,否则,各种包会安装失败…

光伏电站气象站:现代光伏系统的重要组成部分

光伏电站气象站,作为现代光伏系统的重要组成部分,集成了气象学、电子信息技术、数据处理与分析等多学科技术于一体,能够实时监测并记录包括温度、湿度、风速、风向、太阳辐射强度、降雨量在内的多种气象参数。这些数据不仅是评估光伏板发电效…

GLSL教程 第8章:几何着色器

目录 8.1 几何着色器的介绍 几何着色器的主要功能: 几何着色器的工作流程: 8.2 实现基本的几何变换 示例:将三角形扩展成多个三角形 8.3 几何着色器的高级应用 1. 粒子系统 2. 光晕效果 3. 线框模型 小结 几何着色器是图形管线中的一…

应用层自定义协议以及序列化和反序列化

文章目录 应用层自定义协议以及序列化和反序列化1、应用层自定义协议1.1、应用层1.2、协议 2、序列化和反序列化3、TCP 为什么支持全双工4、jsoncpp基础4.1、序列化4.2、反序列化 5、实现网络版计算器6、手写序列化和反序列化 应用层自定义协议以及序列化和反序列化 1、应用层…

企业邮件系统管理(五)从安全配置到备份还原的全方位指南

文章目录 企业邮件系统管理:从安全配置到备份还原的全方位指南引言第一章:邮件系统安全配置一、SMTP连接器及其配置配置步骤: 二、接受域与DNS中的MX记录配置步骤: 三、邮件加密和签名加密和签名步骤: 第二章&#xff…

爬取贴吧的标题和链接

免责声明 感谢您学习本爬虫学习Demo。在使用本Demo之前,请仔细阅读以下免责声明: 学习和研究目的:本爬虫Demo仅供学习和研究使用。用户不得将其用于任何商业用途或其他未经授权的行为。合法性:用户在使用本Demo时,应确…

【Maven】 的继承机制

Maven是一个强大的项目管理工具,主要用于Java项目的构建和管理。它以其项目对象模型(POM)为基础,允许开发者定义项目的依赖、构建过程和插件。Maven的继承机制是其核心特性之一,它允许子项目继承和复用父项目的配置&am…

智能算法驱动的爬虫平台:解锁网络数据的无限潜力

摘要 在信息爆炸的时代,网络数据如同深海宝藏,等待着有识之士发掘其无尽价值。本文将探索智能算法驱动的爬虫平台如何成为解锁这一宝库的关键,不仅剖析其技术优势,还通过实例展示它如何助力企业与开发者高效、稳定地采集数据&…