首页 > 其他分享 >第七周学习总结

第七周学习总结

时间:2023-10-29 22:59:16浏览次数:41  
标签:总结 第七 调度 学习 算法 线程 threads 下载 size

参考博客https://zhuanlan.zhihu.com/p/446103318

https://blog.csdn.net/javaqaaa/article/details/126539194

# 和AI对话

 

 

 # 知识点归纳

## 一、调度算法

操作系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在分时系统中,为了保证系统具有合理的响应时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可以用于作业调度,也可以用于进程调度。 通常将作业或进程归入各种就绪或阻塞队列。 调度算法要求:高资源利用率、高吞吐量、用户满意等原则。 进程调度所采用的算法是与整个系统的设计目标相一致的: 1.批处理系统:增加系统吞吐量和提高系统资源的利用率; 2.分时系统:保证每个分时用户能容忍的响应时间。 3.实时系统:保证对随机发生的外部事件做出实时响应。

## 二、线程

当涉及到并发编程时,线程是非常重要的概念。线程是操作系统进行调度的最小单位,它允许我们在同一进程中同时执行多个任务。
以下是一些关于线程的要点:

轻量级:线程是相对于进程而言的,它比进程更轻量级。线程之间共享进程的资源,包括内存空间、文件描述符等,这使得线程的切换比进程的切换更加高效。
并发执行:线程的特点之一是能够并发执行。多个线程可以在同一时间片内交替执行,从而实现任务的并行处理。这对于性能敏感的应用程序和处理大量并发请求的服务器很有用。
共享数据:与进程不同,线程共享相同的地址空间,可以访问同一块内存区域。但这也带来了线程安全的问题,因为多个线程可能同时访问和修改共享数据,需要使用同步机制(如锁、信号量等)来确保数据的一致性和线程安全性。
线程间通信:线程可以通过共享内存进行简单的通信。此外,还有其他线程间通信机制,如消息传递、管道、信号等。
上下文切换:线程切换的开销相对较小,因为线程共享相同的地址空间和资源,不需要切换进程的上下文。这使得线程适合于任务之间频繁切换的场景,例如事件驱动编程。
线程安全:由于线程共享数据,需要特别注意线程安全。编写线程安全的代码意味着在访问和修改共享数据时进行适当的同步措施,以避免竞争条件和数据不一致。

需要注意的是,线程的并发执行也带来了一些挑战,如竞争条件、死锁、活锁等问题。因此,在编写并发程序时,需要仔细考虑这些问题,并使用适当的同步和调度技术来确保正确性和性能。

 

# 伪代码示例

当涉及到并发执行时,一个常见的例子是多线程下载文件。
考虑一个场景,我们需要下载一个大文件并将其分成若干个部分同时下载。这可以通过多线程来实现并发下载,以加快下载速度。
以下是一个简单的伪代码示例:

```c

from threading import Thread

# 定义下载函数
def download(url, start, end):
# 通过 URL 下载文件的指定部分
# 将下载的部分保存到本地文件中

# 定义主函数
def main():
url = "http://example.com/file.rar"
num_threads = 4 # 使用 4 个线程下载文件
file_size = get_file_size(url) # 获取文件的总大小

# 计算每个线程下载的部分大小
part_size = file_size // num_threads

# 创建线程数组
threads = []

# 创建并启动线程
for i in range(num_threads):
start = i * part_size
end = start + part_size - 1
if i == num_threads - 1:
end = file_size - 1
thread = Thread(target=download, args=(url, start, end))
thread.start()
threads.append(thread)

# 等待所有线程完成下载
for thread in threads:
thread.join()

print("文件下载完成!")

# 执行主函数
if __name__ == "__main__":
main()

```

在这个例子中,我们创建了一个主函数 main(),其中包含了多线程下载的逻辑。我们通过 num_threads 变量指定要使用的线程数,根据文件总大小计算每个线程要下载的部分的大小。
然后,我们创建线程数组 threads,并用 Thread 类来创建并启动每个线程。每个线程都调用 download 函数来下载文件的指定部分。最后,我们使用 thread.join() 等待所有线程完成下载。
当所有线程完成下载后,打印消息表示文件下载完成。
这个例子展示了多线程并发下载的能力,利用多个线程同时下载文件的不同部分,可以显著提高下载速度和效率。

标签:总结,第七,调度,学习,算法,线程,threads,下载,size
From: https://www.cnblogs.com/moynaliao/p/17796709.html

相关文章

  • 2023-2024第一学期第四周助教总结
    第四周助教总结2023.10.29本次总结所属课程2023-2024第一学期计算机基础与程序设计本次作业要求作业要求作业提交情况提交情况一、作业提交情况本次作业提交情况较好,大多数同学都自觉按时提交了作业,仅有部分同学没有提交作业,希望能尽快改正。本次作业中......
  • 学年(2023-2024-1)学号(20231311)《计算机基础与程序设计》第5周学习总结
    2023-2024-120231311《计算机基础与程序设计》第5周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第五周作业这个作业的目标下载Pep/9虚拟机,学习机器语言与汇编语言,算法与伪代码等......
  • 2023-2024-1 20231325 《计算机基础与程序设计》第5周学习总结
    目录*作业信息*教材学习内容总结1.《计算机科学概论》第6章2.《c语言程序设计》第4章*基于AI的学习*学习心得*学习进度条作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业的要求在哪里1.学习《计算机科学概论》第6章并完成云......
  • Xilinx VIvado学习-01 数值处理之乘法(无符号)
    Verilog数值处理,在处理减法的时候,需要注意溢出问题。实例:a*b=c 1`timescale1ns/1ps2//////////////////////////////////////////////////////////////////////////////////3//Company:4//Engineer:5//6//CreateDate:2023/10/2323:33:077//......
  • 学习笔记七
    并发编程并行计算导论受硬件条件的限制,计算机程序通常是为串行计算编写的。顺序算法与并行算法begin-end代码块中顺序算法可能包含多个步骤,所有步骤都是通过单个任务依次执行的,每次执行一个步骤。所有步骤执行完成,算法结束。右侧为并行算法描述,使用cobegin-coend代......
  • Prufer序列 学习笔记
    2023.10.29晚,在随机做AtCoder的时候见到了[ABC303Ex]ConstrainedTreeDegree。然后开始思考DP,未果后看题解,发现是Prufer序列->尝试学习Prufer序列。什么是Prufer序列Prufer序列是一种将带标号的树用一个唯一的整数序列表示的方法,是解决树计数问题的工具。给一棵有根树......
  • python面向对象-学习笔记(六、方法相关的补充)
    私有化方法私有方法classPerson:__age=18#私有方法def__run(self):print("run")#def_Person__run(self):#print("Personrun")p=Person()#p.__run()#p._Person__run()print(Person.__dict__)内置特殊方法......
  • 2023-2024-1 20231407陈原《计算机科学与概论》第五周学习总结
    这个是哪里的作业?<2023-2024-1计算机基础与程序设计第五周作业>作业的要求在哪里?https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05作业的目的是什么?Pep/9虚拟机机器语言与汇编语言算法与伪代码测试:黑盒,白盒作业正文  https://www.cnblogs.com/CCCY......
  • 第四章学习笔记
    并发编程本章论述了并发编程,介绍了并行计算的概念,指出了并行计算的重要性,比较了顺序算法与并行算法,以及并行性与并发性,解释了线程的原理及相对于进程的优势。通过示例介绍了Pthread中的线程操作,句括线程管理函数。互斥量、连接、条件变量和屏障等线程同步工具;通过具体示例演......
  • MySQL技术内幕InnoDB存储引擎学习笔记
    1、MYSQL体系结构: 2、INNODB存储引擎:支持事务,其设计目的主要是面向在线事务处理的应用。特点:行锁设计,支持外键,并支持类似oracle的非锁定读,同时设计用来最有效的利用使用内存和CPU;5.5.8开始默认使用innodb存储引擎使用多版本并发控制来获得高并发性,并实现了sql的4种隔离级......