Loading

UDP协议 、 UDP协议实战 、 操作系统的发展史 、 多道技术、 进程理论

你不过是太阳的后裔而已(小学生)

UDP协议

# udp是无链接的,先启动哪一端都不会报错
# 服务端
import socket

# 需要自己指定udp协议(默认是TCP协议)
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
msg, addr = server.recvfrom(1024)
print('msg>>>>:', msg.decode('utf8'))
print('addr>>>:', addr)
server.sendto(b'hai hai hai', addr)


# 客户端
import socket

client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8080)  # 往哪发,类似于通讯录
client.sendto(b'hello server', server_addr)
msg, addr = client.recvfrom(1024)
print('msg>>>:', msg.decode('utf8'))
print('addr>>>:', addr)

基于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(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 = f'来自客户端1的消息:{msg}'
    client.sendto(msg.encode('utf-8'), 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 = f'来自客户端2的消息:{msg}'
    client.sendto(msg.encode('utf-8'), server_addr)
    msg, addr = client.recvfrom(1024)
    print(msg.decode('utf8'),addr)

操作系统的发展史

穿孔卡片机

1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式。此时还没有操作系统的概念。
优势:一个人独占一台电脑,机房内,只能够进入一个人
劣势:cpu利用极低,全是手工在操作

img

12673efa79cd237634702ab98885ea7

联机批处理系统

一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率,计算机处理数据之后再输出给用户看

2870b718b81ac96b5de5b40659730ff

脱机批处理系统

为克服与缓解:高速主机与慢速外设的矛盾,提高CPU的利用率,又引入了脱机批处理系统,即输入/输出脱离主机控制。 
'''
用户可以远程传入指令,将指令传入高速磁带,交给主机来处理,目的也是为了提高CPU的利用率
'''
也是现在计算机的雏形
# 总结:操作系统的系统发展史其实就是提升CPU利用率的过程

bdd21e5843494c5e4f79c6012f89c94

多道技术

# 针对单核,来进行研究
# 目的:提高CPU的运行效率

'''
串行:多个任务排队执行,总耗时就是多个人物完成时间叠加
空间上的复用:多个人物排队执行,总耗时就是多个任务完整时间叠加
'''

# 多道:利用空闲的时间提前准备,缩短总执行时间并且还能提高cpu利用率
'''
时间上的复用:切换+保存状态
cpu在两种情况下会被拿走:
1.程序遇到IO操作,CPU自动切走运行其他程序
2.程序长时间占用CPU 系统发现之后也会强行切走CPU保证其他程序可以使用
'''

dd26e5e989c4625de565cf272257737

进程理论

什么是程序、什么是进程

程序:没有被再执行的代码(死的)
进程:正在执行的程序(活的)

为什么有进程的概念

为了更加精确的描述出一些实际状态
'在描述的时候用进程比较方便'

进程的调度算法发展史

1.先来先服务
	缺陷:如果所有的进程都要排队进行, 正在运行的程序如果需要10小时,而它后面的程序只需要一两秒需要等它运行完才可以,不合理'对短作业不友好'
2.短作业优先
	缺陷:'对长作业不友好',如果短作业程序太多了,很难轮到长作业
3.时间片轮转法与多级反馈队列:
时间片轮转法:先公平的将CPU分给每个人执行
多级反馈队列:根据作业长短的不同再合理分配CPU执行时间
'''目的就是为了能够让单核的计算机也能够做到运行多个程序'''

caa831b03f8eb82effb367aaae45194

并发与并行

并发

看上去像同时在执行就可以称之为是并发
eg:
'''
饭店里面有多桌客人(任务) 
但是只有一个服务员(CPU) 
如何让所有客人都感觉被服务员服务着(CPU执行)
让服务员在多桌客人之间快速的来回切换并保存状态即可
让CPU在多个程序之间利用多道技术来回切换+保存状态
单核肯定能够实现并发 但是不能实现并行!!!  
'''

并行

必须同一时间同时运行才可以称之为并行
"""单核计算机肯定不能实现并行 必须要有多个CPU"""

高并发与高并行

高并发:我们写的软件可以支持1个亿的并发量
	一个亿的用户来了之后都可以感觉到自己被服务着
高并行:我们写的软件可以支持1个亿的并行量
    上述话语的言外之意是计算机有一亿个CPU

同步与异步:

同步

提交完任务之后原地等待任务的返回结果 期间不做任何事情
'''
喊了一个人吃饭,中途就什么也不做,然后等他一起去吃饭
'''

异步

提交完任务之后不愿地等待任务的结果,直接去做其他事情,有结果自动提醒
'''
喊了一个人吃饭,中途去做自己的事,然后他完事了一起去吃饭
'''

阻塞与阻塞

阻塞与非阻塞

进程分为三个状态,如下图
'''就绪态:程序进入运行态之后肯定处于就绪态
运行态:程序被CPU执行时
阻塞态:程序执行过程中的IO操作 '''

阻塞:阻塞态
非阻塞:就绪态\运行态

99a5c9e6ca1af4a6a55df138ec5f804img

同步异步与阻塞非阻塞结合

同步异步:用来描述人物的提交方式
阻塞非阻塞:用来描述人物的执行状态

可以结合为四种状态:
同步阻塞:排队期间不做任何事
同步非阻塞:排队期间喝水吃东西,但人还在队列中
异步阻塞:在椅子上坐着,但是不做任何事
异步非阻塞:在椅子上坐着,期间喝水吃东西(程序运行的极致)

而我是龙的传人

posted @ 2022-04-18 21:05  香菜根  阅读(43)  评论(0编辑  收藏  举报