一些网络的常见问题

1. tcp和udp可以同时监听相同端口号吗?

 答:可以。IP数据包首部有个叫协议字段,指出了上层协议是TCP还是UDP。

        网络层读取数据包的时候,已经知道上层是什么报文,可以直接交给内核进程做区分处理。

2. 多个线程可以使用同一个端口吗?

 答:可以。一个端口只可以被一个进程使用,但可以被多个线程使用,这种方式可以提高系统的并发性能和效率

        需要注意的是,多个线程共享同一个端口时需要做线程同步和互斥操作。

        多个线程共享同一个端口的应用场景很多。例如,Web服务器可以使用多个线程来处理并发的HTTP请求。

3. 什么是 I/O 多路复用 ?

答:I/O 多路复用是为了解决每个 I/O 请求都得开一个线程去做读写操作,缓解线程/进程数量过多时的压力

       I/O多路复用,一个线程可以监视多个描述符(socket),一旦某个socket就绪,能够通过事件通知用户程序进行读写操作,省去了反复轮询的开销。

        多个socket的I/O操作都在一个线程内交替地顺序完成,这就叫I/O多路复用,这里的“复用”指的是复用同一个线程,“多路”是指多个socket。

4. select,poll,epoll 的各项对比

原文 https://www.cnblogs.com/wiesslibrary/p/15708316.html

(1) select 的 socket 是以数组存放,所以有1024个的限制

(2) poll 把socket 改成链表的方式存放,所以没有个数限制。但poll仍然需要对socket链表遍历,查找就绪的。

(3) epoll 在poll基础上继续改进。用链表专门存储就绪的socket,并且每个socket都绑定了响应回调。 这样就不需要每次都遍历整个socket链表。称为事件响应。

(4) epoll 的事件响应机制 分水平触发 和边缘触发。

     水平触发不需要立刻响应回调, 下次调用epoll_wait时,会再次响应。

    边缘触发则需要立刻响应。

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

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

相关文章

SpringCloud系列(12)--服务提供者(Service Provider)集群搭建

前言:在上一章节中我们成功把微服务注册进了Eureka集群,但这还不够,虽然注册服务中心Eureka已经是服务配置了,但服务提供者目前只有一个,如果服务提供者宕机了或者流量过大,都会影响到用户即服务使用者的使…

Java-GUI-AWT-布局

1 需求 Frame:默认布局是BorderLayoutDialog:默认布局是BorderLayoutPanel:默认布局是FlowLayout 2 接口 3 示例 在Java AWT(Abstract Window Toolkit)中,各种容器的默认布局方式如下: Frame…

【刷爆LeetCode_01题_合并两个有序数组】

算法题,好像是不让使用函数 一、题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。…

Oracle数据库的简单使用

Oracle简单使用 一、数据库的介绍二、Oracle介绍账号管理Oracle的安装Oracle服务的作用OracleRemExecService服务创建数据库 常用命令 三、SQL语言SQL分类实用的数据表添加注释数据操纵语言(DML)查询语句(SELECT)wherelikedistinc…

pycharm集成github项目,拉取项目并进行代码管理

首先你要有一个github项目,然后找到一个想要拉取github项目的本地路径,打开git命令行,执行git clone http…路径,可能会需要你输入git的用户名和密码;用pycharm打开该项目;添加python解释器,我用…

YOLOv8改进项目汇总-超全改进-ultralyticsPro介绍:订阅了《芒果YOLOv8原创改进专栏》的读者免费赠送,包括很多稀有改进

🔥🔥🔥专注于YOLOv8改进,NEW - YOLOv8 🚀 in PyTorch >, Support to improve Backbone, Neck, Head, Loss, IoU, LA, NMS and other modules🚀 Makes YOLOv8 improvements easy again 芒果出品 YOLOv8…

Linux中返回值0值与非零值问题

在学习Linux的过程中,尤其是使用C语言进行编程的过程中,常常会发现Linux系统中喜欢用int类型的0或者非0值作为返回值表示该调用函数操作的成功或者失败。而我们在算法编程或者使用C编程的过程中,往往喜欢使用bool值表示一个操作的成功或者失败…

上汽大通:依托电子签网络,升级产业供应链协同

2023年12月,法大大发布了中国首部《汽车行业合同数智化白皮书》(点击阅读及下载:中国首部!《汽车行业合同数智化白皮书》重磅发布 | 附下载)。该白皮书中基于法大大自身参与汽车行业合同数智化建设的实践和思考&#x…

防反接、防过压、缓启动电路相关

一、防反接电路 电源正确接入时 电流从 VIN 端流向负载,经由 Q3(NMOS) 通向地(GND)。在上电瞬间,由于 MOS 管的体二极管效应,地回路通过体二极管接通。接下来,由于 Vgs(门源电压)大于 Vgsth(门限电压)&…

Neo4j图数据库

一、语句 (1)查看节点和节点间的关系 MATCH (n) RETURN n LIMIT 10000

【python】python新闻文本数据统计和聚类 (源码+文本)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Bentley二次开发教程02-开发环境搭建

1 Bentley 平台介绍 图 1 Bentley 平台介绍 Bentley 软件大致可分为四大平台,分别为用于设计的 Microstation 平台,用于协同的 ProjectWise 平台,用于对资产进行全生命周期管理的 AssetWise 平台和数据互联互通的 数字孪生平台 iTwin。 1.1 …

Linux文件系统与日志

一、inode和block 文件数据包括元信息与实际数据,文件存储在硬盘上,硬盘最小存储单位是扇区,每个扇区存储512字节 1.block(块):文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通…

【电子通识】什么是8D分析法?8D步骤及用法?

在问题分析时往往会听到8D报告这样的词汇。如在电源专题【电源专题】案例:电源芯片厂家怎么判断电源芯片端口是否损坏中我们使用的图片就来源于电源芯片厂家的8D报告。 什么是8D分析法? 8D问题分析由美国国防部于1974年创立,当时用于军用物资采购保障。目前在汽车产业、组装…

项目开发中的注意事项,帮你少走很多弯路,必读!!

项目开发过程中,为确保项目的顺利进行和最终成功,需要注意以下事项: 1. 明确项目目标与范围 清晰定义项目目标:确保所有团队成员对项目要达成的目标有统一认识,避免目标模糊导致的方向偏离。严格控制项目范围&#x…

MapReduce案例-电影网站数据统计分析

本文适合大数据初学者学习MapReduce统计分析业务问题的步骤和基础的MapReduce编程方法,初步掌握Hadoop对计算任务的管理。 本文末尾有全部数据集和完整代码连接。 1.准备工作 安装Hadoop:Hadoop 3.3.2 离线安装-CSDN博客 按照好Hadoop之后要检查一下datanode运行情况…

在控制台实现贪吃蛇

在控制台实现贪吃蛇 前备知识Win32APICOORD这个结构体的声明如下:GetStdHandle 函数GetConsoleCursorInfo 函数SetConsoleCursorInfo 函数 SetConsoleCursorPosition 函数getAsyncKeyState 函数 控制台窗口的大小以及字符打印介绍控制台中的坐标宽字符及本地化介绍s…

从0到1学习typescript(更新版)

1、常用ts基本命令 (1)下载 npm install typescript -g(2)检查ts版本 tsc -v(3)将ts编译为js tsc index.ts2、定义变量 首先要明确一个概念,ts中确定了类型之后,就不能再修改类…

SRS服务接入华为云CDN

CDN简介: CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网…

SSH远程连接docker容器-Linux-SSH -L 打隧道

问题:在物理机上用podman创建了一个容器,想SSH直接远程连接docker容器 解决方式: 步骤1: 在本地terminal输入以下命令: ssh -L 容器端口号:localhost:容器端口号 物理机用户名物理机ip -p 物理机端口号 即可,可新打…