Python攻城师的成长————UDP协议与进程技术

今日学习目标

  • 学习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:在椅子上坐着 期间喝水吃东西办公 (程序运行的极致)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值