Day 40
今日内容概要
- UDP协议
- 操作系统的发展史
- 多道技术
- 进程的概念
- 进程的并行与并发(重要)
- 进程的三状态(运行态/就绪态/阻塞态)
- 同步、异步、阻塞、非阻塞(重要)
今日内容详细
1.UDP协议
import socket
server=socket.socket(type=socket.SOCK_DGRAM)#括号内默认不写是TCP,写是UDP
server.bind(('127.0.0.1',8080))#写自己地址和端口
while True:
msg,addr=server.recvfrom(1024)#接收客户端消息,客户端地址
print('来自客户端消息:%s'%msg.decode('utf8'))
print('客户端地址:',addr)
back_data=input(f'输入要回复给客户端{addr}的消息:').strip()
server.sendto(back_data.encode('utf8'),addr)#要发的消息,要发的地址
——————————————————————————————————————————————
import socket
client=socket.socket(type=socket.SOCK_DGRAM)#括号内默认不写是TCP,写是UDP
server_addr=('127.0.0.1',8080)#写自己地址和端口
while True:
send_data=input('输入要发送给服务端的消息:').strip()
client.sendto(send_data.encode('utf8'),server_addr)#要发的消息,要发的地址
msg,addr=client.recvfrom(1024)#接收服务端消息,服务端地址
print('来自服务端消息:%s'%msg.decode('utf8'))
print('服务端地址:',addr)
'补充说明'
1.服务端不需要考虑烤糊端是否异常退出
2.UDP不存在黏包问题(UDP多用于短消息的交互)
2.操作系统的发展史
'学习并发编程其实就是在学习操作系统的发展史 也称之为是并发编程的发展史'
计算机三大核心硬件:
CPU:是计算机中的核心,也是真正干活的人
内存:给CPU准备即将需要运行的代码
硬盘:永久存储将来可能要被运行的代码
强调:CPU是整个计算机执行效率的核心
阶段一:穿孔卡片
(程序员把要写的东西在卡片上穿孔,然后一人插入一次,只有第一个程序员走了第二个程序员才能使用该计算机)
CPU利用率低
好处是程序员可以一个人占用计算机
阶段二:联机批处理系统
(磁带里存储多个程序员的数据,把磁带直接给输入机缩短时间)
缩短录入数据的时间 让CPU连续工作时间变长 提升CPU利用率
阶段三:脱机批处理系统
(远程操作,从输入机传到卫星机中,然后再通过高速磁带传给主机运算 再通过磁带传给卫星机,然后传给输入机)
现代计算机的雏形 提升CPU利用率
总结:
操作系统的发展史也可以看成是cpu利用率的发展史
3.多道技术(重要)
研究并发编程的前提:计算机只有一个cpu/一个核
单道技术:(串行)
所有的程序排队执行,耗时是所有程序耗时的和
多道技术:
计算机利用cpu干活时硬盘提前准备好一些数据,提高效率,总耗时较短
"""
多道技术的特点:切换+保存状态
1.切换:(去执行其他程序)
①.程序自身进入IO操作(输入输出操作、获取用户输入、读取文件、保存文件、time.slep()等)会切换
②.程序长时间占用CPU会切换(由于只有一个CPU,所以要保证各程序雨露均沾)
eg:五桌客人只有一个服务员,当一个人点菜时就去服务另一个客人
2.保存状态:
每次切换前记录下当前执行状态,切回来时基于切换前的状态继续执行
"""
举例:
做饭耗时50min
洗衣耗时30min
烧水耗时10min
单道技术:50+30+10
多道技术:50
4.进程的概念
1.什么是进程?
程序:一堆躺在文件上的死代码
进程:正在被运行的程序(活着的)
2.进程的调度算法:
#当同时执行5个程序:
1.先来先服务
谁先来就先服务谁,针对耗时短的程序不友好
2.短作业优先调度
谁耗时短先服务谁,针对耗时长的程序不友好
3.时间片轮法+多级反馈队列(目前计算机在用的方法)
将固定的时间分成多份时间片,所有程序来了都公平的分一份
可能该时间内已经有程序运行结束了,没结束的去下一层继续公平分多个时间片
但是如果此时又新增一个程序,那新增的优先级最高,最下层的优先级最低
5.进程的并行与并发(重要)
并行:
多个进程必须同时执行(单核/单个cpu无法实现 必须多个cpu)
并发:
多个进程看上去像同时执行的就称之为并发(利用多道技术单个cpu也可以实现)
#只要并行,那肯定就属于并发
eg:
1.我的网站能支持14亿并行量(高并行)
答:不合理!14亿cpu*一个cpu价格得多少钱!!!
2.我的网站能支持14亿并发量(高并发)
答:合理,比如12306这个网站
6.进程的三状态
1.所有的程序要想进入'运行态' 必须先经过'就绪态'
2.运行过程中如果出现了IO操作 则进入'阻塞态'(比如time.sleep())
阻塞态要想进入运行态必须先经过就绪态(比如sleep时间结束后则进入就绪态)
3.运行过程中如果时间片用完 则继续回到就绪态

7.同步、异步、阻塞、非阻塞(重要)
#用于描述'任务'的提交状态
同步:提交完任务后原地等待任务结果,期间不做任何事
eg:叫某人去吃饭,然后一直干等着他有结果为止
异步:提交完任务后直接走开去做其他事,结果自动提醒
eg:叫某人去吃饭,然后去忙我自己的,等他有结果了为止
#用于描述'进程'的执行状态
阻塞 :阻塞态
非阻塞:就绪态 运行态
同步阻塞:在银行排队,在队伍中什么都不做 (效率最低)
同步非阻塞:在银行排队,且在队伍中做其他事
异步阻塞:取号,在旁边座位等着叫号什么都不做
异步非阻塞:取号,在旁边座位等着叫号且做其他事 (效率最高)