python学习Day40

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.运行过程中如果时间片用完 则继续回到就绪态

image

7.同步、异步、阻塞、非阻塞(重要)
#用于描述'任务'的提交状态
同步:提交完任务后原地等待任务结果,期间不做任何事
	eg:叫某人去吃饭,然后一直干等着他有结果为止
异步:提交完任务后直接走开去做其他事,结果自动提醒
	eg:叫某人去吃饭,然后去忙我自己的,等他有结果了为止
  

#用于描述'进程'的执行状态
阻塞  :阻塞态
非阻塞:就绪态 运行态
同步阻塞:在银行排队,在队伍中什么都不做       (效率最低)
同步非阻塞:在银行排队,且在队伍中做其他事
异步阻塞:取号,在旁边座位等着叫号什么都不做
异步非阻塞:取号,在旁边座位等着叫号且做其他事 (效率最高)
posted @ 2022-08-08 18:05  逢诱  阅读(27)  评论(0)    收藏  举报