操作系统杂项(十)

news2024/9/23 17:20:03

目录

一、简述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.coloradmin.cn/o/1950444.html

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

相关文章

SpringBoot入门:如何新建SpringBoot项目(保姆级教程)

在本文中,我们将演示如何新建一个基本的 Spring Boot 项目。写这篇文章的时候我还是很惊讶的,因为我发现有些java的初学者,甚至工作10年的老员工居然并不会新建一个SpringBoot项目,所以特别出了一篇文章来教大家新建一个SpringBoo…

状态机 XState 使用

状态机 一般指的是有限状态机(Finite State Machine,FSM),又可以称为有限状态自动机(Finite State Automation,FSA),简称状态机,它是一个数学模型,表示有限个…

Java链接elasticsearch8.14.1

项目需求,需要实现海量数据的聚合、查询。因为职业生涯开发使用springboot微服务架构、Java开发的方式,所以,项目前期准备了elasticsearch、kibana、logstash的集群环境,作为服务端,用于数据的收集、存储;但…

masscan 端口扫描——(Golang 简单使用总结)

1. 前言 最近要做一个扫描 ip 端口的功能 扫描的工具有很多,但是如何做到短时间扫描大量的 ip 是个相对困难的事情。 市场上比较出名的工具有 masscan和nmap masscan 支持异步扫描,对多线程的利用很好,同时仅仅支持 syn 半开扫描&#xff…

Emacs之解决无法输入中文问题(一百四十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

研究生选择学习Android开发的利与弊?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!产品经理可以学学Axure快…

ForCloud赢战攻防 无惧突发0day漏洞 ForCloud虚实结合快速处置

攻防演练前夕,亚信安全威胁情报中心监测到一个存在于Nacos Derby中的0day漏洞,漏洞利用代码为公开状态,攻击者利用此漏洞可在目标服务器上执行任意代码。 造成的破坏程度?你可能正在使用! Nacos(Dynamic …

【React】事件绑定:深入解析高效处理用户交互的最佳实践

文章目录 一、什么是事件绑定?二、基本事件绑定三、绑定 this 上下文四、传递参数五、事件对象六、事件委托七、常见事件处理八、优化事件处理 React 是现代前端开发中最受欢迎的框架之一,其组件化和高效的状态管理能力使得构建复杂的用户界面变得更加容…

Java成为最适合中国人体质编程语言的缘由

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 语言的流行度Java在中国的普及…

被工信部认可的开源软件治理解决方案

近日,工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”,开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选,成为经工信部认可的优秀解决方案,这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

线性表的链式存储结构————循环链表(java)

线性表的链式存储结构————循环链表(java) 文章目录 线性表的链式存储结构————循环链表(java)什么是循环链表循环链表的实现结语 嗨!收到一张超级美丽的风景图,愿你每天都能顺心! 什么是…

【Django】anaconda环境变量配置及配置python虚拟环境

文章目录 配置环境变量配置python虚拟环境查看conda源并配置国内源在虚拟环境中安装django 配置环境变量 control sysdm.cpl,,3笔者anaconda安装目录为C:\ProgramData\anaconda3 那么需要加入path中的有如下三个 C:\ProgramData\anaconda3 C:\ProgramData\anaconda3\Scripts C:…

由bext安装“异常”引出的话题:windows上转义字符的工作原理

由bext安装“异常”引出的话题:Windows上转义字符的工作原理,与ai“闲扯”不经意学习知识点。 (笔记模板由python脚本于2024年07月25日 19:21:13创建,本篇笔记适合喜欢用ai学习的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff…

【反转链表 II】python刷题记录

印象中,这是遍历r2了,还好没放弃。 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def reverseBetween(self, head: Optional…

RFID温度标签: 冷链管理迈向智能化、精准化的新时代。

在现代商业和社会发展中,冷链物流扮演着至关重要的角色。它不仅涉及食品、药品等敏感物资的安全运输,更是保障公众健康与福祉的重要环节。随着人们对生鲜冷链需求的日益增长,冷链物流行业也迎来了以物联网技术为主导发展新阶段。我国冷链物流…

.NET程序集编辑器/调试器 dnSpy 使用介绍

原文链接:https://www.cnblogs.com/zhaotianff/p/17352882.html dnSpy dnSpy是一个.NET程序集调试器和编辑器。它可以用它来编辑和调试程序集,即使在没有源码的情况下。 主要功能: 调试.NET和Unity程序集 编辑.NET和Unity程序集 项目地…

Windows11安装WSL2 笔记240726

以管理员身份打开控制台输入 wsl --status wsl --status如果什么也没有,说明系统还未安装WSL , 执行 wsl --install 进行安装 wsl --install安装完成后, 再次执行 wsl --status 可看到 wsl --status 默认版本: 2 当前计算机配置不支持 WSL1。 若要使用 WSL1,请启用…

vuex学习day01-vuex简述、基于脚手架创建项目、基于脚手架创建项目

1、vuex简述 之所以采用vuex是因为当我们有多个公共状态的组件时,vue的简单性容易崩溃 (1)概念 Vuex 是Vue.js 应用程序的状态管理模式库。简单讲,vuex是vue的一个状态管理工具。 (2)作用 管理vue中的…

SSRF过滤攻击

SSRF绕过: 靶场地址:重庆橙子科技SSRF靶场 这个是毫无过滤的直接读取,但是一般网站会设置有对SSRF的过滤,比如将IP地址过滤。 下面是常用的绕过方式: 1.环回地址绕过 http://127.0.0.1/flag.php http://017700…

三目操作符

双目操作符有、-、*、/、% 单目操作符有--、、、- 三目操作符有表达式1&#xff1f;表达式2&#xff1a;表达式3 如果表达式1为真则表达式2计算否则表达式3计算&#xff0c;计算结果为整个表达式的结果 #include<stdio.h> int main() {int a 0;int b 0;scanf(&quo…