操作系统杂项(十)

目录

一、简述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.rhkb.cn/news/383983.html

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

相关文章

redis的使用场景

1. redis的使用场景 redis使用场景的案例:[1]热点数据的缓存[2]分布式锁[3]短信业务(登录注册时)2. redis实现注册登录功能 代码 在发送验证码时,先判断数据库是否有该手机号,有则发送验证码(此时redis缓存…

vs code解决报错 (c/c++的配置环境 远端机器为Linux ubuntu)

参考链接:https://blog.csdn.net/fightfightfight/article/details/82857397 https://blog.csdn.net/m0_38055352/article/details/105375367 可以按照步骤确定那一步不对,如果一个可以就不用往下看了 目录 一、检查一下文件扩展名 二、安装扩展包并…

C#,.NET常见算法

1.递归算法 1.1.C#递归算法计算阶乘的方法 using System;namespace C_Sharp_Example {public class Program{/// <summary>/// 阶乘&#xff1a;一个正整数的阶乘Factorial是所有小于以及等于该数的正整数的积&#xff0c;0的阶乘是1&#xff0c;n的阶乘是n&#xff0…

WPF MVVM框架:CommunityToolkit.Mvvm包使用介绍

最近在需要使用MVVM框架的时候才发现MvvmLight作者宣布停止更新了&#xff0c;有点可惜。 原作者推荐使用CommunityToolkit.Mvvm包&#xff0c;所以这里做一个CommunityToolkit.Mvvm包使用的全面的总结。 开发环境&#xff1a; Visual Studio 2019Windows 10 1903CommunityTo…

四、GD32 MCU 常见外设介绍 (5) TIMER 模块介绍

5.1.TIMER 基础知识 TIMER分高级定时器&#xff0c;通用定时器L0&#xff0c;L1&#xff0c;L2和基本定时器。 5.2.硬件连接说明 TIMER 属于片内外设&#xff0c;对于外部硬件设计&#xff0c;只需要单独IO口外接信号线即可。 5.3.GD32 TIMER 外设原理简介&#xff08;以 G…

电脑屏幕录制软件,分享4款(2024最新)

在今天&#xff0c;我们的电脑屏幕成为了一个多彩多姿的窗口。通过它我们可以浏览网页、观看视频、处理文档、进行游戏……有时&#xff0c;我们想要记录下这些精彩瞬间&#xff0c;与朋友分享&#xff0c;或者作为教程留存&#xff0c;这时&#xff0c;电脑屏幕录制就显得尤为…

全年销售7亿块,巧克力企业如何通过相邻业务打造极致产品力?

蒂罗尔巧克力是日本经典的巧克力品牌。 糖果业务是松尾早期的主营业务&#xff0c;在主营业务下滑的情况下&#xff0c;确立新的竞争方向&#xff0c;通过主营业务优势进入相邻业务&#xff0c;打造新产品成就巧克力极致产品力&#xff0c;避免衰退重回增长。 如何通过进入相邻…

Ubuntu下载jdk:cannot execute binary file

虚拟机上Ubuntu系统安装jdk且配置环境之后&#xff0c;java -version显示cannot execute binary file&#xff0c;多番查阅推测是由于系统和jdk版本不兼容的原因。 uname -m查看系统版本位i686&#xff0c;是32位的&#xff0c;和64位的jdk版本不兼容。因此&#xff0c;下载32位…

Linux:core文件无法生成排查步骤

1、进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改。 使用ulimit -a 命令检查是否开启core文件生成限制 如果发现-c后面的结果是0&#xff0c;就临时添加环境变量ulimit -c unlimited&#xff0c;之后在启动程序观察是否有core生成&#xff0c;如果…

【学习笔记】解决Serial Communication Library编译问题

【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口&#xff0c;它的工作流程设计在外观和感觉上与 PySerial 相似&#xff0c;但串口速…

Axure软件新功能解析与应用技巧分享

Axure是一种用于创建原型和交互设计的软件工具&#xff0c;广泛应用于操作界面。&#xff08;UI&#xff09;和客户体验&#xff08;UX&#xff09;为了展示和测试应用程序、网站或其他数据产品的性能和操作界面&#xff0c;设计帮助产品经理、设计师和开发者制作具有交互性的原…

服务器上使用Docker部署sonarQube,并集成到Jenkins实现自动化。

目标是要在目标服务器上使用docker工具部署好sonar环境&#xff0c;然后再集成到Jenkins中实现自动化的代码审查工作。 Docker 首先Dokcer的源大部分现在都用不了&#xff0c;于是我上网查询&#xff0c;终于找到了一个可用的镜像。 编辑/etc/docker/daemon.json文件&#x…

lua 游戏架构 之 游戏 AI (五)ai_autofight_find_way

这段Lua脚本定义了一个名为 ai_autofight_find_way 的类&#xff0c;继承自 ai_base 类。 lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客文章浏览阅读238次。定义了一套接口和属性&#xff0c;可以基于这个基础类派生出具有特定行为的AI组件。例如&…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Golang | Leetcode Golang题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; // 判断是否为完全平方数 func isPerfectSquare(x int) bool {y : int(math.Sqrt(float64(x)))return y*y x }// 判断是否能表示为 4^k*(8m7) func checkAnswer4(x int) bool {for x%4 0 {x / 4}return x%8 7 }func numSquares(n int) i…

【快速逆向二/无过程/有源码】掌上高考—2024高考志愿填报服务平台

逆向日期&#xff1a;2024.07.21 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&…

深蓝学院 机器人操作系统ROS理论与实践(四)

一、机器人是什么&#xff1f; 机器人是如何组成的&#xff08;控制的角度&#xff09; 二、机器人系统构建 执行机构的实现——机器人底盘、电机、舵机等 驱动系统的实现 内部传感器的实现 控制系统的实现 外部传感系统的实现——摄像头、激光雷达、GPS等 1、连接摄像头 …

STM32——GPIO(点亮LEDLED闪烁)

一、什么是GPIO&#xff1f; GPIO&#xff08;通用输入输出接口&#xff09;&#xff1a; 1.GPIO 功能概述 GPIO 是通用输入/输出&#xff08;General Purpose I/O&#xff09;的简称&#xff0c;既能当输入口使用&#xff0c;又能当输出口使用。端口&#xff0c;就是元器件…

uniapp手写滚动选择器

文章目录 效果展示HTML/Template部分&#xff1a;JavaScript部分&#xff1a;CSS部分&#xff1a;完整代码 没有符合项目要求的选择器 就手写了一个 效果展示 实现一个时间选择器的功能&#xff0c;可以选择小时和分钟&#xff1a; HTML/Template部分&#xff1a; <picker…

【OpenCV C++20 学习笔记】扫描图片数据

扫描图片数据 应用情景图像数据扫描的难点颜色空间缩减&#xff08;color space reduction&#xff09;查询表 扫描算法计算查询表统计运算时长连续内存3种扫描方法C风格的扫描方法迭代器方法坐标方法LUT方法 算法效率对比结论 应用情景 图像数据扫描的难点 在上一篇文章《基…