一:UDP
1.服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8008))
while True:
msg, address = server.recvfrom(1024)
print(msg.decode('utf8'))
print('客户端的地址是:', address)
server_data = input('请输入想要发给客户端的信息').strip()
server.sendto(server_data.encode('utf8'), address)
2.客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
ipaddress = ('127.0.0.1', 8008)
while True:
client_data = input('请输入想要发给服务端的信息').strip()
client.sendto(client_data.encode('utf*'), ipaddress)
msg, address = client.recvfrom(1024)
print(msg.decode('utf8'))
print('服务端的地址是', address)
udp的特点:
- 1.服务端不受客户端的影响
- 2.(不存在粘包问题)适合短消息的交互
二: 操作系统的发展史
阶段一:穿孔卡片
- cpu的利用效率低
- 程序员可以独享一台电脑
阶段二:联机批处理系统
- 缩短了录入数据的时间,能够让cpu持续不断的工作
阶段三:脱机批处理系统
- 利用磁带将众多程序员给的众多代码连在一起读入电脑,大大提高了cpu的利用效率
总结:操作系统的发展史,其实就是提升cpu效率的发展史
三:多道技术
前提:一台计算机只有一个核,一个cpu
1.单道技术
- 程序按照先后顺序依次执行,执行的时间是所有程序的总时间
2.多道技术
- 计算机利用内存空闲的时间提前加载好即将要执行的数据,大大减少了程序的运行时间
- 原理:切换+保存状态
- 切换的条件:
- 1.程序自身的IO状态(t输入输出,sheep, 文件读取,文件保存)
- 2.程序长时间占用cpu
- 保存的条件:每次切换前都要保存当前状态,下次切换回来之后接着保存状态继续执行
四:进程理论
1.进程的理解:
- 程序:躺在硬盘里的没有被执行的代码
- 进程:正在被执行的代码
2.进程的调度算法
- 1.先来先服务算法
- 针对耗时比较短的程序不友好
- 2.短作业优先级算法
- 针对耗时比较多的程序不友好
- 3.时间片轮转法+多级反馈队列
- 将固定的时间等分,程序启动之后获得相同的服务时间
- 分配多次之后,如果还有程序没有执行完毕,将其放到下一层
- 越往下一层,说明程序的执行时间越长,每次分的时间片越多,但是优先级越低
五:进程的并行与并发
1.并行
- 同时执行多个程序
- 不支持单核
2.并发
- 看似多个程序同时执行
- 支持单核
六:进程的三个状态(了解即可)
- 1.所有的进程要想被运行 必须先经过就绪态
- 2.运行过程中如果出现了IO操作 则进入阻塞态
- 3.运行过程中如果时间片用完 则继续进入就绪态
- 4.阻塞态要想进入运行态必须先经过就绪态
七:同步和异步(重点)
- 用于描述任务的提交状态
- 同步
提交完任务之后原地等待任务的结果 期间不做任何事 - 异步
提交完任务之后不原地等待直接去做其他事 结果自动提醒
八:阻塞和非阻塞
- 用于描述进程的执行状态
- 阻塞:处于阻塞态
- 非阻塞:处于就绪态或者运行态
九:同步异步和阻塞与非阻塞
- 1.同步阻塞:相当于在银行排队,同时啥事也不做
- 2.同步非阻塞:相当于银行排队,同时干着别的事
- 3.异步阻塞:取号,坐着干等着
- 4.异步非阻塞:取号,坐着边等边干其他事