文章目录
UDP协议
什么是UDP协议
说明 | 解释 |
---|---|
英文名: | User Datagram Protocol |
中文名: | 数据报协议 |
协议说明: | UDP是一种面向无连接的传输层通信协议。 |
举例: | 发短信,不需要双方建立连接,但是,数据报的大小应限制在64k以内 |
特点: | 效率高,数据传输不安全,容易丢包,UDP是一个不可靠的协议,发送方所发送的数据报并不—定以相同的次序到达接收方。 |
应用场景
在
选择UDP作为传输协议时必须要谨慎
。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多
,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的QQ就是使用的UDP协议
应用实列
基于UDP实现一个简易版的聊天室
服务端:
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
msg, address = server.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
server.sendto('我是服务端 你好啊'.encode('utf8'), address)
客户端:
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_address = ('127.0.0.1', 8080)
client.sendto('我是客户端 想我了没'.encode('utf8'), server_address)
msg, address = client.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
补充说明:
1.服务端不需要考虑客户端是否异常退出
2.UDP不存在黏包问题(UDP多用于短消息的交互)
操作系统的发展史
1.穿孔卡片
优劣势 | 解释 |
---|---|
优势 | 程序员可以一个人独占一个计算机 |
劣势 | CPU的利用率很低,工作效率也低 |
2.联机批处理系统
优劣势 | 解释 |
---|---|
优势 | 监督程序不停地处理各个作业,从而实现了作业到作业的自动转接,减少了作业建立时间和手工操作时间,有效克服了人机矛盾,提高了计算机的利用率。 |
劣势 | 但是,在作业输入和结果输出时,主机的高速CPU仍处于空闲状态,等待慢速的输入/输出设备完成工作: 主机处于“忙等”状态。 |
3.脱机批处理系统
功能:
(1)从输入机上读取用户作业并放到输入磁带上。
(2)从输出磁带上读取执行结果并传给输出机。
优劣势 | 解释 |
---|---|
优势 | 有效缓解了主机与设备的矛盾。主机与卫星机可并行工作,二者分工明确,可以充分发挥主机的高速计算能力。 |
劣势 | 每次主机内存中仅存放一道作业,每当它运行期间发出输入/输出(I/O)请求后,高速的CPU便处于等待低速的I/O完成状态,致使CPU空闲。 |
为改善CPU的利用率,又引入了
多道程序系统。
多道程序系统
什么是多道程序系统?
所谓多道程序设计技术,就是指
允许多个程序同时进入内存并运行
。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。
单道技术
所有的程序排队执行 总耗时是所有程序耗时之和
运行过程:
在A程序计算时,I/O空闲, A程序I/O操作时,CPU空闲(B程序也是同样);必须A工作完成后,B才能进入内存中开始工作,两者是串行的,全部完成共需时间=T1+T2。
多道技术
计算机利用空闲时间提前准备好一些数据 提高效率 总耗时较短
-
切换和保存状态
1.CPU在两种下会切换(去执行其他程序)
1.程序自身进入IO操作
IO操作:输入输出操作
获取用户输入
time.sleep()
读取文件
保存文件2.程序长时间占用CPU
2.保存状态
每次切换之前要记录下当前执行的状态 之后切回来基于当前状态继续执行
-
运行过程:
将A、B两道程序同时存放在内存中,它们在系统的控制下,可相互穿插、交替地在CPU上运行:当A程序因请求I/O操作而放弃CPU时,B程序就可占用CPU运行,这样 CPU不再空闲,而正进行A I/O操作的I/O设备也不空闲,显然,CPU和I/O设备都处于“忙”状态,
大大提高了资源的利用率,从而也提高了系统的效率
,A、B全部完成所需时间<<T1+T2。 -
作用:
多道程序设计技术不仅使CPU得到充分利用,同时改善I/O设备和内存的利用率,从而提高了整个系统的资源利用率和系统吞吐量(单位时间内处理作业(程序)的个数),最终提高了整个系统的效率。
进程理论
1.如何理解进程?
程序:一堆躺在文件上的死代码
进程:正在被运行的程序(活的)
2.进程的调度算法
先来先服务算法
针对耗时比较短的程序不友好
短作业优先调度
针对耗时比较长的程序不友好
时间片轮转法+多级反馈队列
将固定的时间均分成很多份 所有的程序来了都公平的分一份
分配多次之后如果还有程序需要运行 则将其分到下一层
越往下表示程序总耗时越长 每次分的时间片越多 但是优先级越低
进程的并行与并发
-
并行
并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核的CPU )
单个CPU肯定无法实现并行 必须要有多个CPU
-
并发
并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。
单个CPU完全可以实现并发的效果 如果是并行那么肯定也属于并发
并行和并发的区别
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器(A,B,C,AB一直占用资源,C一直处于等待状态,只有等A,B资源结束之后在C才有资源使用)
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session(A,B,C,AB一直占用资源,一旦有空闲资源C就会运行,A,B,C可以交替使用资源,提高效率)
高并发与高并行
高并发:我们写的软件可以支持1个亿的并发量
一个亿的用户来了之后都可以感觉到自己被服务着
高并行:我们写的软件可以支持1个亿的并行量
上述话语的言外之意是计算机有一亿个CPU(不太合理)
进程三状态
1)就绪状态(Ready):
进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。
2)运行状态(Running):
进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
3)阻塞状态(Blocked):
由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理器资源分配给该进程,也无法运行。
思路:
1.所有的进程要想被运行 必须先经过就绪态
2.运行过程中如果出现了IO操作 则进入阻塞态
3.运行过程中如果时间片用完 则继续进入就绪态
4.阻塞态要想进入运行态必须先经过就绪态
同步与异步
-
同步
就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事
-
异步
提交完任务之后不原地等待直接去做其他事 结果自动提醒
不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了
阻塞与非阻塞
用于描述进程的运行状态
- 进程三状态图
就绪态
:程序之进入运行态之前肯定要处于就绪态
运行态
:程序被CPU执行着
阻塞态
:程序执行过程中有IO操作
总结:
如果想要运行效率高,那就要让程序在就绪态和运行态来回切换(不要有IO操作)
阻塞:阻塞态
非阻塞:就绪态和运行态
同步异步与阻塞非阻塞结合
同步异步:用来描述任务的提交方式
阻塞非阻塞:用来描述任务的执行状态
-
同步阻塞形式
效率最低。在银行排队 并且在队伍中什么事情都不做
-
异步阻塞形式
在银行排队 并且在队伍中做点其他事
-
同步非阻塞形式
取号 在旁边座位上等着叫号 期间不做事
-
异步非阻塞形式
效率最高。取号 在旁边座位上等着叫号 期间可以做任何事情