日常学习--20240706

1、udp协议的特点有哪些?

a、无连接,发送和接收数据不需要建立连接,开销小,实时性好

b、不可靠传输,不保证数据包能够到达目的地,也不保证数据包的顺序

c、面向数据报的,以数据报形式发送数据

复制代码
// 创建DatagramPacket对象,包含要发送的数据、长度、服务器地址和端口
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);

d、支持广播和多播形式,UDP支持广播和多播功能,这使得UDP能够向多个目的地址发送相同的数据报。

2、TCP如何保证可靠的传输?

序列号和确认应答、超时重传、校验和、流量控制、拥塞控制、连接自动管理、数据分块的方式保证可靠传输。

序列号和确认应答:保证数据到达客户端,客户端能够对数据进行去重、排序等

超时重传:客户端超过定时器时间未应答,则重传

校验和:客户端对数据进行校验和计算对比服务端校验和,如果不一致,则认为数据在传输过程中发生异常,要求服务端重传。

流量控制:服务端会依据客户端的接收窗口大小,调整自己的发送数据速率,避免客户端过多数据堆积,导致丢包重发

拥塞控制:在网络拥堵时,服务端会自动调整自己的发送速率

连接管理:TCP三次握手和四次挥手,确保服务端和客户端已连接

数据分段:TCP数据报文分块,出现丢包等异常时只需重发异常部分。

3、Linux系统的零拷贝技术?

零拷贝(Zero-Copy)就是一种避免 CPU 将数据从一块存储拷贝到另外一块存储的技术,是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手。

传统read+write方式:四次上下文切换和四次数据拷贝(其中两次有CPU参与)

主要方式有:

mmap+write方式:四次上下文切换和三次数据拷贝(用户空间到socket缓冲区时CPU参与)

splice(通过内核管道做中转传递数据),两次上下文切换和两次数据拷贝(要求有一个文件描述符需要支持管道)

sendfile方式:Linux2.4以前,两次上下文切换和三次拷贝(有一次是内核缓冲区拷贝到socket缓冲区);Linux2.4及以后,两次上下文切换和两次拷贝(磁盘到内存缓冲区,内存缓冲区到网卡缓冲区;原来的内核缓冲区到socket内存缓冲区改为了非传统拷贝,在socket缓冲区中引用指向内核缓冲区包含了偏移量等)

4、说一说进程调度算法有哪些

  • 先来先服务(FCFS,First-Come, First-Served):按照进程到达的先后顺序进行调度,先到达的进程先执行。

  • **短作业优先调度(SJF, Shortest Job First):**选择估计运行时间最短的进程优先执行,以减少平均等待时间。特点:可以最大程度地减少平均等待时间,但可能会导致长作业被饿死(即长时间得不到执行)。

  • 时间片轮转调度(RR, Round-Robin): 所有进程按照到达顺序排成一个队列,每个进程执行一个时间片后,将CPU时间片分配给下一个进程。特点:适用于时间片较短的情况,能够平衡各个进程的执行,但可能导致上下文切换频繁。

  • **优先级调度(PSA, Priority Scheduling Algorithm):**为每个进程分配一个优先级,优先级高的进程先获得CPU时间片。特点:可以根据不同的情况调整优先级,但可能导致低优先级的进程长时间等待,出现饥饿现象。

  • **多级反馈队列调度(MFQ, Multi-level Feedback Queue Scheduling):**将进程分为多个队列,每个队列有不同的优先级和时间片大小。进程在一个队列中执行完毕后,可以进入下一个优先级较高的队列。特点:能够兼顾不同类型的作业,既可以保证短作业优先执行,又可以避免长作业饥饿。

  • **最高响应比优先调度(HRRN, Highest Response Ratio Next):**根据等待时间和估计运行时间的比值(响应比)来选择下一个执行的进程,以最大化响应比。特点:可以减少平均等待时间,但需要预先知道每个进程的运行时间。

相关推荐
北风toto28 分钟前
python学习DataFrame数据结构
数据结构·python·学习
Andy杨42 分钟前
20250710-2-Kubernetes 集群部署、配置和验证-网络组件存在的意义?_笔记
网络·笔记·kubernetes
沫儿笙1 小时前
弧焊机器人气体全方位节能指南
网络·人工智能·机器人
qq_386322692 小时前
华为网路设备学习-26(BGP协议 一)
学习
DKPT2 小时前
Java设计模式之行为型模式(责任链模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
L_autinue_Star2 小时前
手写vector容器:C++模板实战指南(从0到1掌握泛型编程)
java·c语言·开发语言·c++·学习·stl
AI360labs_atyun3 小时前
Java在AI时代的演进与应用:一个务实的视角
java·开发语言·人工智能·科技·学习·ai
绿蚁新亭3 小时前
Spring的事务控制——学习历程
数据库·学习·spring
IPdodo全球网络服务3 小时前
什么是IP关联?跨境卖家如何有效避免IP关联?
网络·网络协议·tcp/ip
南棱笑笑生4 小时前
20250711荣品RD-RK3588开发板在Android13下的开机自启动的配置步骤
网络