今日学习目标
- 学习UDP协议,知道进程的概念以及相关知识
文章目录
学习内容
- UDP协议
- 操作系统的发展史
- 多道技术
- 进程理论
一、UDP协议
1.什么是UDP协议
1.UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
2.UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。UDP是一个不可靠的协议,发送方所发送的数据报并不—定以相同的次序到达接收方。
2.应用场景
UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,比如
1.语音广播
2.QQ
3.简单文件传送
4.简单网络管理协议
3.应用实例
基于UDP实现简易版本的qq
服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
while True:
msg, addr = server.recvfrom(1024)
print(addr)
print(msg.decode('utf8'))
back_msg = input('请回复消息>>>:').strip()
server.sendto(back_msg.encode('utf8'), addr)
客户端1
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8080)
while True:
msg = input('请输入想要聊天的内容>>>:').strip()
msg = '来自客户端1的消息:%s' % msg
client.sendto(msg.encode('utf8'), server_addr)
msg, addr = client.recvfrom(1024)
print(msg.decode('utf8'), addr)
客户端2
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8080)
while True:
msg = input('请输入想要聊天的内容>>>:').strip()
msg = '来自客户端2的消息:%s' % msg
client.sendto(msg.encode('utf8'), server_addr)
msg, addr = client.recvfrom(1024)
print(msg.decode('utf8'), addr)
二、操作系统的发展史
1.穿孔卡片
优势:一个人独占电脑
劣势:CPU利用率极低
2.联机批处理系统
一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率
3.脱机批处理系统
是现代计算机核心部件的雏形、提高CPU的利用率
总结
:操作系统的发展史其实就是提升CPU利用率的过程
三、多道技术
并发
是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发
并行
真正意义上同时运行,只有具备多个cpu才能实现并行
高并发与高并行
高并发:我们写的软件可以支持1个亿的并发量
一个亿的用户来了之后都可以感觉到自己被服务着
高并行:我们写的软件可以支持1个亿的并行量
上述话语的言外之意是计算机有一亿个CPU
补充
1.并行肯定是并发
2.单核的计算机肯定不能实现并行, 但能实现并发
3.我们直接假设单核就是一个盒, 干活的就一个人, 不要考虑cpu里面的内核数
4.无论是并行还是并发,在用户看来都是’同时’运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务
多道技术
目的:提升CPU利用率 降低程序等待时间
‘’‘强调:目前我们研究并发都是以计算机是单核的情况下:只有一个CPU’’’
串行
多个任务排队执行 总耗时就是多个任务完整时间叠加
多道
利用空闲提前准备 缩短总的执行时间并且还能提高CPU利用率
空间上的复用和时间上的复用
-
空间上的复用
多个程序共用一套计算机硬件 -
时间上的复用
例子: 洗衣服30s, 做饭50s, 烧水30s
单道需要110s, 多道只需要任务最长的哪个时间, 切换节省时间
例子:边吃饭边玩游戏 保存状态 -
切换+保存状态
切换cpu分两种情况:
1、 当一个程序遇到IO操作的时候, 操作系统会剥夺该程序的cpu执行权限
作用: 提高了cpu的利用率
2、当一个程序长时间占用cpu的时候, 操作系统也会剥夺该cpu的执行权限
弊端: 降低了程序的执行效率(原本时间+切换时间)
四、进程理论
什么是程序、什么是进程
程序:一堆没有被执行的代码(死的)
进程:正在运行的程序(活的)
为什么有进程的概念
就是为了更加精确的描述出一些实际状态
进程调度算法发展史
1.先来先服务
对短作业任务不太友好
2.短作业优先
多长作业任务不太友好
3.时间片轮转法与多级反馈队列
时间片轮转法:先公平的将CPU分给每个人执行
多级反馈队列:根据作业长短的不同再合理分配CPU执行时间
目的就是为了能够让单核的计算机也能够做到运行多个程序
同步与异步
- 同步
提交完任务之后原地等待任务的返回结果 期间不做任何事情 - 异步
提交完任务之后不愿地等待任务的结果 直接去做其他事情 有结果自动提醒
阻塞与非阻塞
- 进程三状态图
就绪态:程序之进入运行态之前肯定要处于就绪态
运行态:程序被CPU执行着
阻塞态:程序执行过程中有IO操作
思考总结
如果想要尽可能的提升程序执行效率,就要想办法让我们的程序一直处于就绪态和运行态(不要有IO操作)
阻塞:阻塞态
非阻塞:就绪态、运行态
同步异步与阻塞非阻塞结合
- 同步异步:用来描述任务的提交方式
- 阻塞非阻塞:用来描述任务的执行状态
上述两组属于两个不同概念 但是可以结合
- 同步阻塞:
eg:银行排队办理业务 期间不做任何事 - 同步非阻塞:
eg:银行排队办理业务 期间喝水吃东西 但是人还在队列中 - 异步阻塞:
eg:在椅子上坐着 但是不做任何事 - 异步非阻塞:
eg:在椅子上坐着 期间喝水吃东西办公 (程序运行的极致)