UDP协议和实战、操作系统、多道技术、进程理论

一、UDP协议和实战

二、操作系统的发展史

三、多道技术

四、进程理论

一、UDP协议

# 客户端
import socket

# 指定使用UDP协议, 不指定的话,默认为TCP协议
server = socket.socket(type=socket.SOCK_DGRAM)

server.bind(('127.0.0.1', 8888))

msg, addr = server.recvfrom(1024)  # recvfrom 是UDP协议的接收

print(msg.decode('utf8'))  # 解析发送来的内容
print(addr)  # 服务端的位置

server.sendto(b'wuhu, i am you father',addr)
  # 接收到('127.0.0.1', 52376)发来的hello i am superman

LdaRl8.jpg

  # 服务端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8888)
client.sendto(b'hello i am superman', server_addr)  # sendto就是UDP协议的发送

msg, addr = client.recvfrom(1024)
print(msg.decode('utf8'))
print(addr)
# 接收到('127.0.0.1', 8888)发来的wuhu, i am you father

LdaQL4.jpg

  • 基于UDP实现建议版qq
# 服务端

import socket
server = socket.socket(type= socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8888))
while True:
    msg, addr = server.recvfrom(1024)
    print(addr)
    print(msg.decode('utf8'))
    back_msg = input('请回复信息>>>:').strip()
    server.sendto(back_msg.encode('utf8'),addr)

# 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8888)

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)
    
# 增加新的客户端时,代码不需要改变,只需要msg修改一些这是客户n发来的信息

二、操作系统的发展史

1.穿孔卡片
   优势: 一个人使用电脑
   劣势: cpu利用率极低

LdRDvd.jpg

2.联机批处理系统
  一次性可以录入多个用户指令、 缩短了cpu等待的时间, 提高了cpu的利用率

LdWsWF.jpg

3.脱机批处理系统
   是现代计算机核心部件的雏形、 提高CPU的利用率

LdfR1g.jpg

三、多道技术

# 简介:
   多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
# 目的:提升cpu利用率, 降低程序等待时间
"""
 我们目前研究并发都是要计算机为单核的情况
"""
串行:
  在多个任务排队执行,总耗时就是多个任务完整时间叠加

LdI7qJ.jpg

多道:
    利用空闲提前准备,缩短了总的执行时间,并且还能提高CPU的利用率

LdoqOg.jpg

# 多道技术特点
  1、空间上的复用
    多个任务共用一套计算机硬件
  2、时间上的复用
    切换 + 保存状态
 # CPU在两种情况下会被拿走
 1、程序遇到IO操作, CPU自动运行其他程序
 2、程序长时间占用CPU,系统发现之后会强行切走CPU,保证其他程序也能够正常运行使用
  • 进程理论
# 程序和进程理论
 程序: 就是一堆没有被执行的代码(没有运行的)
 进程: 和程序相反, 它是正在运行的程序(在运行的)
    
# 进程
	为了更加精准的描述出一些的实际状态
    
# 进程调度算法发展史
  1、先来先服务
    当长作业执行时,后面来的就要等着它的结束,所以当有短作业想要执行时,就很麻烦,要等
  2、短作业优先
    都是如果短作业很多时,对长作业就又不友好了
  3、时间片轮转法和多级反馈队列
    时间片轮法: 先公平的将CPU分给每个程序执行
    多级反馈队列: 根据作业的长短,从而做不同的分配CPU执行时间

LdqDx0.jpg

  • 重要概念(四星)
# 并发和并行

# 并发: 就是看上去在同时执行就可以称之为并发
   eg:
     饭店里面有很多座客人(等待被执行的任务)
     但是只有一个服务员(cpu)
     就是每座客人刚来的时候,就给他菜单让他看,第二桌来的时候立马去给他菜单,三号座来了也是这样操作,然后一号点单,二、三号看菜单,这样每座都在被执行,并保存状态
  """这个过程就是让CPU在对个程序之间利用多道技术来回切换+保存状态
  单核能够实现并发, 但是不能实现并行
  """

# 并行:必须同一时间同时被执行,才能称之为并行
"""
  单核计算机肯定不能实现并行, 必须要有多个CPU
"""

# 高并发和高并行
  高并发: 就是程序能够支持几个亿的并发量
        就是这几个亿的用户来到可以感受到自己被服务着的意思
  高并行: 写的软件可以支持几个亿的并行(当然我们还是无法实现)
    支持几个亿的并行,就代表这个计算机要有几个亿的CPU,
  • 重要概念(五星)
# 同步和异步
  同步: 
      提交完任务之后原地等待任务的返回值,这个期间不去做其他的事情
  异步:
      提交完任务之后直接做其他的事情, 有结果了就会自动提醒
       
# 阻塞和非阻塞
  进程三状态图
    就绪态: 程序之运行态之前肯定要处于就绪态
    运行态: 程度被CPU执行着
    阻塞态: 程序执行过程中有IO操作
  """
    如果想要T提高程序被执行效率
       就要程序一直处于就绪态和运行态
  """
所以:
阻塞: 阻塞态
非阻塞:就绪态、运行态

LdvABV.jpg

  • 同步异步和阻塞非阻塞组合
同步异步:用来描述任务的提交方式
阻塞非阻塞: 用来描述任务的执行状态

同步+阻塞:
  银行排队办理业务,期间可不做任何事,就等着
同步+非阻塞:
  银行排队办理业务,期间可以去做一些其他的事,但是人还在办理业务的队列中
    
异步阻塞:
   在椅子上坐着,不做任何事
异步非阻塞:
   在椅子上面坐着,在期间喝水、吃东西、工作、玩手机、、(这个过程就是把程序运行到了极致) 

LdxgZ6.gif

posted @ 2022-04-18 19:05  未月  阅读(56)  评论(0)    收藏  举报