【操作系统】FCFS、SJF、HRRN、RR、EDF、LLF调度算法及python实现代码

文章目录

一、先来先服务调度算法(FCFS)

二、短作业优先调度算法(SJF)

三、高响应比优先调度算法(HRRN)

四、轮转调度算法(RR)

五、最早截至时间优先算法(EDF)

六、最低松弛度优先算法(LLF)

相关时间计算
周转时间 = 作业完成时刻 - 作业到达时刻
等待时间 = 周转时间 - 运行时间
带权周转时间 = 周转时间 / 服务时间
平均周转时间 = 作业周转时间之和 / 作业个数
平均带权周转时间 = 带权周转时间之和 / 作业个数
服务时间:作业的运行时间

一、先来先服务调度算法(FCFS)

如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS: first come first service)总是把当前处于就绪队列之首的那个进程调度到运行状态。也就说,它只考虑进程进入就绪队列的先后,而不考虑它的下一个CPU周期的长短及其他因素。

先来先服务的调度算法是最简单的调度算法,既可以用于作业调度 ,也可以用于程序调度,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、创建进程,然后放入“就绪队列”,直到该进程运行到完成或发生某事件堵塞后,进程调度程序才将处理机分配给其他进程。

实现代码:

avg_turnaround_time = 0.0
aqtt = 0.0class Progress:def __init__(self):self.pro_name = ""self.arrive_time = 0self.service_time = 0self.finish_time = 0self.cycling_time = 0self.float_wi = 0.0courses = [Progress() for _ in range(80)]def health_examine(course_num):returndef progress_num(course_num):i = 0for i in range(course_num):print("Enter information for process %d" % (i + 1))courses[i].pro_name = input("Enter process name: ") #进程名courses[i].arrive_time = int(input("Enter arrival time: ")) #到达时间courses[i].service_time = int(input("Enter service time: ")) #服务时间returndef finish_time(course_num):i = 0if courses[0].arrive_time != 0:courses[0].finish_time = courses[0].arrive_time + courses[0].service_timecourses[0].finish_time = courses[0].service_timefor i in range(1, course_num):if courses[i - 1].finish_time >= courses[i].arrive_time:courses[i].finish_time = courses[i - 1].finish_time + courses[i].service_timeelse:courses[i].finish_time = courses[i].arrive_time + courses[i].service_timereturndef cycling_time(course_num): #周转时间for i in range(course_num):courses[i].cycling_time = courses[i].finish_time - courses[i].arrive_timereturndef float_wi(course_num): #带权周转时间for i in range(course_num):courses[i].float_wi = float(courses[i].cycling_time) / courses[i].service_timereturndef avg_turnaround_time(course_num): #平均周转时间sum_turnaround_time = 0for i in range(course_num):sum_turnaround_time += courses[i].cycling_timeglobal avg_turnaround_timeavg_turnaround_time = sum_turnaround_time / course_numreturndef aqtt(course_num): #平均带权周转时间sum_float_wi = 0for i in range(course_num):sum_float_wi += courses[i].float_wiglobal aqttaqtt = sum_float_wi / course_numreturndef print_fifo(course_num):print("Process information:")print("Process\tArrival Time\tService Time\tFinish Time\tTurnaround Time\tWeighted Turnaround")for i in range(course_num):print("%s\t%d\t%d\t%d\t%d\t%.2f" % (courses[i].pro_name, courses[i].arrive_time, courses[i].service_time, courses[i].finish_time, courses[i].cycling_time, courses[i].float_wi))print("Average Turnaround Time\tAverage Weighted Turnaround Time")print("%.2f\t%.2f" % (avg_turnaround_time, aqtt))returndef main():course_num = 5course_num = int(input("Enter the number of processes: "))progress_num(course_num)finish_time(course_num)cycling_time(course_num)float_wi(course_num)avg_turnaround_time(course_num)aqtt(course_num)print_fifo(course_num)if __name__ == "__main__":main()

输出信息:

Enter the number of processes: 3
Enter information for process 1
Enter process name: p1
Enter arrival time: 0
Enter service time: 5
Enter information for process 2
Enter process name: p2
Enter arrival time: 2
Enter service time: 1
Enter information for process 3
Enter process name: p3
Enter arrival time: 3
Enter service time: 4
Process information:
Process	Arrival Time	Service Time	Finish Time	Turnaround Time	Weighted Turnaround
p1	0	5	5	5	1.00
p2	2	1	6	4	4.00
p3	3	4	10	7	1.75
Average Turnaround Time	Average Weighted Turnaround Time
5.33	2.25进程已结束,退出代码0

二、短作业优先调度算法(SJF)

算法思想是追求更少的平均时间,最少的平均周转时间,最少的平均平均带权周转时间算法规则是最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)。即可用于作业调度,也可用于进程调度。用于进程调度时称为“短进程优先(SPF,Shortest Process First)算法”。 SJF和SPF都是非抢占式的算法。但是也有抢占式的版本----最短剩余时间优先算法。(SRTN,Shortest Remaining Time Next)

  • 优点: "最短的"平均等待时间、平均周转时间
  • 缺点: 不公平。对短作业有利,对长作业不利。可能产生==饥饿现象。==另外,进程/作业的运行时间都是由用户提供的,并不一定真实,不一定能做到真正的短作业优先。
  • 饥饿: 会导致饥饿

实现代码(非抢占式):


N = 5
class PCB:def __init__(self):self.process_name = ""self.arrive_time = 0self.service_time = 0self.complete_time = 0PCB_list = [PCB() for _ in range(N + 1)]def sjf(n):for i in range(1, n + 1):print("请输入第", i, "进程名字: ", end="")PCB_list[i].process_name = input()print("请输入到达时间: ", end="")PCB_list[i].arrive_time = int(input())print("请输入服务时间: ", end="")PCB_list[i].service_time = int(input())temp = 1for i in range(2, n + 1):if PCB_list[temp].arrive_time > PCB_list[i].arrive_time or (PCB_list[temp].arrive_time == PCB_list[i].arrive_time and PCB_list[temp].service_time > PCB_list[i].service_time):temp = iPCB_list[0] = PCB_list[temp]PCB_list[temp] = PCB_list[1]PCB_list[1] = PCB_list[0]sum = 1PCB_list[1].complete_time = PCB_list[1].arrive_time + PCB_list[1].service_timetime = PCB_list[1].complete_timeprint("\n第1次进程调度运行的进程为 :   ", PCB_list[1].process_name)nextprocess = 0while True:if sum >= n:breaknextprocess = i = sum + 1while i <= n:if time >= PCB_list[i].arrive_time and PCB_list[i].service_time < PCB_list[nextprocess].service_time:nextprocess = ii += 1PCB_list[0] = PCB_list[nextprocess]PCB_list[nextprocess] = PCB_list[sum + 1]PCB_list[sum + 1] = PCB_list[0]nextprocess = sum + 1if PCB_list[nextprocess].arrive_time > time:time = PCB_list[nextprocess].arrive_timetime += PCB_list[nextprocess].service_timePCB_list[nextprocess].complete_time = timesum += 1print("第", sum, "次进程调度运行的进程为 :   ", PCB_list[nextprocess].process_name)return 0def print_info():i = 1round_time = [0] * (N + 1)force_round_time = [0] * (N + 1)sum_time = 0print("\n 进程   到达时间    服务时间     完成时间     周转时间   带权周转时间")while i < N + 1:round_time[i] = PCB_list[i].complete_time - PCB_list[i].arrive_timeforce_round_time[i] = round_time[i] / PCB_list[i].service_timeprint(PCB_list[i].process_name, "\t  ", PCB_list[i].arrive_time, "\t    ", PCB_list[i].service_time, "\t\t ",PCB_list[i].complete_time, "\t        ", round_time[i], "\t     ", force_round_time[i])sum_time += force_round_time[i]i += 1print("\n\n系统平均带权周转时间: ", (sum_time / (i - 1)))if __name__ == "__main__":print("\t\t短作业优先调度算法")sjf(N)print_info()

输出信息:

请输入第 1 进程名字: p1
请输入到达时间: 0
请输入服务时间: 5
请输入第 2 进程名字: p2
请输入到达时间: 2
请输入服务时间: 1
请输入第 3 进程名字: p3
请输入到达时间: 3
请输入服务时间: 4
请输入第 4 进程名字: p4
请输入到达时间: 5
请输入服务时间: 6
请输入第 5 进程名字: p5
请输入到达时间: 7
请输入服务时间: 8第1次进程调度运行的进程为 :    p1
第 2 次进程调度运行的进程为 :    p2
第 3 次进程调度运行的进程为 :    p3
第 4 次进程调度运行的进程为 :    p4
第 5 次进程调度运行的进程为 :    p5进程   到达时间    服务时间     完成时间     周转时间   带权周转时间
p1 	   0 	     5 		  5 	         5 	      1.0
p2 	   2 	     1 		  6 	         4 	      4.0
p3 	   3 	     4 		  10 	         7 	      1.75
p4 	   5 	     6 		  16 	         11 	      1.8333333333333333
p5 	   7 	     8 		  24 	         17 	      2.125系统平均带权周转时间:  2.1416666666666666进程已结束,退出代码0

三、高响应比优先调度算法(HRRN)

高响应比优先算法考虑了作业的等待时间,又考虑了作业运行时间的调度算法,因此照顾了短作业,又不致使长作业等待时间过长,从而改善了处理机的调度的性能。这个算法相当于给与每个作业一个动态的优先级,这个优先级是随着时间变化的变化的,等待时间不断地增加,这将让长作业的优先级在等待期间不断地增大,等待足够的时间,必然会得到处理机。

1、该优先级的变化规则可以描述为:

2、规律:

  • 作业的等待时间相同,则要求服务的越短,优先级越高,类似于SJF算法。
  • 当要求服务的时间相同时,等得越久优先级越高,类似于FCFS算法。
  • 对于长作业来说,该算法实现了较好的折中。

3、优点:算法折中,长短作业兼顾,时间分配较为均匀。

4、缺点:每次计算响应比都会花费一定时间,即时间开销,其性能比SJF算法略差。

实现代码:

class JobControl:def __init__(self, Id, arr_time, ser_time):self.Id = Id  # 序号self.arr_time = arr_time  # 到达时间self.ser_time = ser_time  # 服务时间self.Rp = 0self.state = Falsejobs = []
n = 0  # 进程个数
new_time = 0if __name__ == "__main__":print("请输入进程总数:")n = int(input())min_arr_time = float('inf')for i in range(n):print(f"请输入{i+1}号进程的到达时间和服务时间:")Id = iarr_time, ser_time = map(float, input().split())jobs.append(JobControl(Id, arr_time, ser_time))if arr_time < min_arr_time:min_arr_time = arr_timenew_time = min_arr_timeprint("进程执行的顺序:")m = 0while m != n:max_Rp = -1max_id = 0for i in range(n):if not jobs[i].state and jobs[i].arr_time <= new_time:jobs[i].Rp = ((new_time - jobs[i].arr_time) + jobs[i].ser_time) / jobs[i].ser_timeif max_Rp < jobs[i].Rp:max_Rp = jobs[i].Rpmax_id = ijobs[max_id].state = Truenew_time += jobs[max_id].ser_timeprint(max_id+1, end=" ")m += 1print("\n进程的完成时间:", new_time)

输出信息:

请输入进程总数:
4
请输入1号进程的到达时间和服务时间:
0 20
请输入2号进程的到达时间和服务时间:
5 15
请输入3号进程的到达时间和服务时间:
1 5
请输入4号进程的到达时间和服务时间:
15 10
进程执行的顺序:
1 3 2 4 
进程的完成时间: 50.0进程已结束,退出代码0

四、轮转调度算法(RR)

在轮转(RR)法中,系统将所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间(如30 ms)便产生一次中断,去激活进程调度程序进行调度,把CPU分配给队首进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片。

在RR调度算法中,应在何时进行进程的切换,可分为两种情况:
① 若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片。
② 在一个时间片用完时,计时器中断处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。

基于时间片为1的进程运行情况:

实现代码:

class JC:def __init__(self):self.Id = 0self.arr_time = 0.0self.ser_time = 0.0self.state = Falseself.arr_s = Falsejc = [JC() for _ in range(10)]
n = 0
new_time = 0.0
rr = 0.0if __name__ == "__main__":min_val = 0xFFFprint("请输入进程的总数:")n = int(input())print("请依次输入各进程的信息,按到达时间排列:")for i in range(n):print(f"请输入{i+1}号进程的到达时间和服务时间:")jc[i].Id = ijc[i].arr_time, jc[i].ser_time = map(float, input().split())print("请输入时间片:")rr = float(input())m = 0print("进程完成执行的顺序:")jc[0].arr_s = Truearr_sum = 1ary = [-1] * 100ary[0] = 0k = 1q = 0while True:if jc[ary[q]].arr_s and not jc[ary[q]].state:if jc[ary[q]].ser_time <= rr:new_time += jc[ary[q]].ser_timejc[ary[q]].state = Truejc[ary[q]].ser_time = 0print(jc[ary[q]].Id+1, end=' ')m += 1q += 1if arr_sum < n:for i in range(arr_sum, n):if jc[i].arr_time <= new_time and not jc[i].arr_s:jc[i].arr_s = Trueary[k] = ik += 1else:new_time += rrjc[ary[q]].ser_time -= rrif arr_sum < n:for i in range(arr_sum, n):if jc[i].arr_time <= new_time and not jc[i].arr_s:jc[i].arr_s = Trueary[k] = ik += 1ary[k] = ary[q]k += 1q += 1if m == n:breakprint(f"进程的完成时间: {new_time}")

输出信息:

请输入进程的总数:
5
请依次输入各进程的信息,按到达时间排列:
请输入1号进程的到达时间和服务时间:
0 4
请输入2号进程的到达时间和服务时间:
1 3
请输入3号进程的到达时间和服务时间:
2 4
请输入4号进程的到达时间和服务时间:
3 2
请输入5号进程的到达时间和服务时间:
4 4
请输入时间片:
1
进程完成执行的顺序:
2 4 1 3 5 进程的完成时间: 17.0

五、最早截至时间优先算法(EDF)

最早截止期限优先(EDF)调度根据截止期限动态分配优先级。截止期限越早,优先级越高;截止期限越晚,优先级越低。根据 EDF 策略,当一个进程可运行时,它应向系统公布截止期限要求。优先级可能需要进行调整,以便反映新可运行进程的截止期限。注意单调速率调度与 EDF 调度的不同,前者的优先级是固定的。 

在每一个新的就绪状态,调度器都是从那些已就绪但还没有完全处理完毕的任务中选择最早截止时间的任务,并将执行该任务所需的资源分配给它。在有新任务到来时,调度器必须立即计算EDF,排出新的定序,即正在运行的任务被剥夺,并且按照新任务的截止时间决定是否调度该新任务。如果新任务的最后期限早于被中断的当前任务,就立即处理新任务。按照EDF算法,被中断任务的处理将在稍后继续进行。
该算法的思想是从两个任务中选择截至时间最早的任务,把它暂作为当前处理任务,再判断该任务是否在当前周期内,若不在当前周期内,就让另一任务暂作当前处理任务,若该任务也不在当前周期内,就让CPU空跑到最靠近的下一个截至时间的开始,若有任务在该周期内,就判断该任务的剩余时间是否小于当前截至时间与当前时间的差,若小于,则让该任务运行到结束,否则,就让该任务运行到该周期的截止时间,就立即抢回处理器,再判断紧接着的最早截至时间,并把处理器给它,做法同上,如此反复执行。

非抢占式调度任务用于非周期实时任务:

抢占式调度任务用于周期性实时任务: 

 

实现代码(抢占式):

class JobControl:def __init__(self, Id, arr_time, ser_time, end_time):self.Id = Idself.arr_time = arr_timeself.ser_time = ser_timeself.end_time = end_timeself.edf = -1self.state = Falsen = 7
jc = [JobControl(0, 0, 0, 0) for _ in range(10)]
new_time = 0print("进程总数为:" + str(n))for i in range(5):jc[i].Id = ijc[i].arr_time = i * 20jc[i].ser_time = 10jc[i].end_time = (i + 1) * 20for i in range(5, 7):jc[i].Id = ijc[i].arr_time = (i - 5) * 50jc[i].ser_time = 25jc[i].end_time = (i - 5 + 1) * 50m = 0
min_val = 0xFFF
min_id = 0print("进程完成执行的顺序:")
while True:for i in range(7):if jc[i].arr_time <= new_time and not jc[i].state and jc[i].edf == -1:if jc[i].end_time < min_val:min_val = jc[i].end_timemin_id = jc[i].Idjc[i].edf = 0jc[min_id].ser_time -= 5new_time += 5if jc[min_id].ser_time == 0:jc[min_id].state = Trueprint(min_id+1, end=" ")m += 1min_val = 0xFFFfor i in range(7):if jc[i].arr_time <= new_time and not jc[i].state:if jc[i].end_time < min_val:min_val = jc[i].end_timemin_id = jc[i].Idif m == n:breakprint()
print("进程的完成执行时间:" + str(new_time))

输出信息:

进程总数为:7
进程完成执行的顺序:
1 2 6 3 4 7 5 
进程的完成执行时间:100

六、最低松弛度优先算法(LLF)

最低松弛度优先算法(Lowest Slack Time First,简称LLF)是一种动态优先级调度算法,它根据进程的剩余处理时间和截止时间来确定优先级,以确保系统能够尽可能快地完成最紧急的任务。在LLF算法中,每个进程都有一个松弛度(Slack Time),表示当前时间到达截止时间的剩余时间。

LLF算法的核心思想是选择具有最低松弛度的进程作为下一个执行的任务,以最大限度地降低任务的响应时间和延迟。根据任务的紧急(或松弛)度,来确定任务的优先级,紧急度越高,优先级越高。要求系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在任务最前面。

  • 主要用于可抢占调度方式中
  • 松弛度=必须完成的时间 - 其本身的运行时间 - 当前时间
  • 抢占时机:松弛度为零时。
  • 最小响应时间: LLF算法优先执行剩余处理时间最短、截止时间最近的任务,因此能够最小化任务的响应时间。
  • 高实时性: LLF算法适用于对任务响应时间有严格要求的实时系统,能够确保紧急任务及时完成。
  • 负载均衡: LLF算法能够在各个任务之间实现相对均衡的负载分配,提高系统整体性能。

实现代码:

class Job:def __init__(self):self.Id = 0self.arr_time = 0.0self.ser_time = 0.0self.end_time = 0.0self.llf = -1self.state = Falsen = 6
jc = [Job() for _ in range(10)]
new_time = 0print("进程总数:", n)for i in range(4):jc[i].Id = ijc[i].arr_time = i * 20jc[i].ser_time = 10jc[i].end_time = (i + 1) * 20for i in range(4, 6):jc[i].Id = ijc[i].arr_time = (i - 4) * 50jc[i].ser_time = 25jc[i].end_time = (i - 4 + 1) * 50m = 0
min_val = float('inf')
min_id = 0print("进程完成执行的顺序:")
while True:for i in range(6):if jc[i].arr_time <= new_time and not jc[i].state and jc[i].llf == -1:jc[i].llf = jc[i].end_time - jc[i].ser_time - new_timeif jc[i].llf < min_val:min_val = jc[i].llfmin_id = jc[i].Idjc[min_id].ser_time -= 5new_time += 5if jc[min_id].ser_time == 0:jc[min_id].state = Trueprint(min_id+1, end=" ")m += 1min_val = float('inf')for i in range(6):if jc[i].arr_time <= new_time and not jc[i].state:jc[i].llf = jc[i].end_time - jc[i].ser_time - new_timeif jc[i].llf < min_val:min_val = jc[i].llfmin_id = jc[i].Idif m == n:breakprint("\n")
print("进程的完成执行时间:", new_time)

输出信息:

进程总数: 6
进程完成执行的顺序:
1 2 5 3 4 6 进程的完成执行时间: 90

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

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

相关文章

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 &#xff08;1&#xff09;关于CPU &#xff08;2&#xff09;关于内…

Autodesk 3DS MAX 2025 (3Dmax2025)激活版

3ds Max 2025 是一款功能强大的3D建模、动画和渲染软件&#xff0c;广泛应用于建筑、游戏开发、影视制作等多个领域。在材质设定和描影、3D彩现以及动画和效果方面&#xff0c;3ds Max 2025也提供了丰富的增强功能&#xff0c;以满足用户在不同制作需求中的要求。 3ds Max 2025…

Linux多进程通信(2)——POSIX信号量使用例程

1.POSIX信号量 1&#xff09;POSIX信号量和System V信号量区别 常用的是POSIX信号量&#xff0c;使用起来更加方便&#xff0c;而POSIX信号量分为有名信号量和无名信号量 POSIX信号量是多线程多进程安全的&#xff0c;而System V标准的信号量并不是&#xff0c;Posix通过sem_…

外包干了25天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Mysql中的 IFNULL 函数的详解

Mysql中的 IFNULL 函数的详解 概念 在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL&#xff0c;如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返回第二个参数的值。 语法 IFNULL(a, b)Demo 举例说明 创建表 create table student_one( sno varchar(20)…

机器学习: 绪论(基础概念)

文章目录 一、机器学习做什么二、机器学习的基本术语2.1、数据相关2.1.1、数据集2.1.2、特征&#xff08;Feature&#xff09;2.1.3、样本空间&#xff08;Sample Space&#xff09; 2.2、任务相关2.2.1、分类2.2.2、回归2.2.3、聚类2.2.4、监督学习和无监督学习 三、机器学习思…

智乃想考一道鸽巢原理

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

VSCode 设置vue2模板

点击设置 > 用户代码片段 > 输入Vue &#xff08;打开vue.json&#xff09;> 将代码复制内 "Print to console": {"prefix": "<","body": ["<template>"," <div class$1></div>"…

苹果App上架指南

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

【随笔】Git -- 高级命令(中篇)(七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

文本直接生成2分钟视频,即将开源模型StreamingT2V

Picsart人工智能研究所、德克萨斯大学和SHI实验室的研究人员联合推出了StreamingT2V视频模型。通过文本就能直接生成2分钟、1分钟等不同时间&#xff0c;动作一致、连贯、没有卡顿的高质量视频。 虽然StreamingT2V在视频质量、多元化等还无法与Sora媲美&#xff0c;但在高速运…

【项目技术介绍篇】若依项目代码文件结构介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

深入剖析Xen与KVM虚拟化技术及其架构特点

引言 在现代数据中心与云计算领域中&#xff0c;虚拟化技术已经成为提升资源利用率、增强灵活性与可扩展性的重要基石。其中&#xff0c;Xen与KVM作为两种备受瞩目的开源虚拟化解决方案&#xff0c;分别以其独特的设计理念与技术创新引领着行业的进步与发展。Xen源自剑桥大学的…

基于深度学习的停车场车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 上图测试结果如下图所示&#xff1a; 2.算法运行软件版本 matlab2022a 3.部分核心程序 image imread(image_test\test.jpg); image2 image;%图…

第21章-直连路由和静态路由

1. 直连路由 1&#xff09;定义&#xff1a;指路由器接口直接相连的网段的路由&#xff1b; 2&#xff09;特点&#xff1a; ① 不需要特别的配置&#xff0c;双UP(物理层数据链路层)&#xff1b; ② 在路由器的接口上配置IP地址即可&#xff1b; ③ 开机自动产生&#xff1b; …

Scala第十六章节(泛型方法, 类, 特质的用法、泛型上下界、协变, 逆变, 非变的用法以及Scala列表去重排序案例)

Scala第十六章节 章节目标 掌握泛型方法, 类, 特质的用法了解泛型上下界相关内容了解协变, 逆变, 非变的用法掌握列表去重排序案例 1. 泛型 泛型的意思是泛指某种具体的数据类型, 在Scala中, 泛型用[数据类型]表示. 在实际开发中, 泛型一般是结合数组或者集合来使用的, 除此…

vulhub中Apache solr XML 实体注入漏洞复现(CVE-2017-12629)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞&#xff1a;XML…

Day13Day14_学点儿HTML_基本标签、div和span、table、form

1 基本标签 HTML&#xff1a;超文本标记语言 定义页面结构 CSS&#xff1a; 层叠样式表 页面显示的样式、排版 BootStrap JS&#xff1a; JavaScript 界面交互(动态交互、逻辑) JQuery <!--~ 适度编码益脑&#xff0c;沉迷编码伤身&#xff0c;合理安排时…

SBCFormer:能够在单板计算机上以每秒1帧的速度进行全尺寸ImageNet分类的轻量级网络

摘要 https://arxiv.org/ftp/arxiv/papers/2311/2311.03747.pdf 计算机视觉在解决包括智能农业、渔业和畜牧业管理等不同领域的实际问题中变得越来越普遍。这些应用可能不需要每秒处理许多图像帧&#xff0c;因此从业者倾向于使用单板计算机&#xff08;SBCs&#xff09;。尽管…

基于SpringBoot的“校园志愿者管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园志愿者管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统首页界面图 志愿者注册…