UDP协议与并发预备理论

UDP协议

# 服务端

      import socket
      server = socket.socket(type=socket.SOCK_DGRAM)  # 指定协议为UDP协议
      server.bind(('127.0.0.1', 9000))
      while True:
          msg, addr = server.recvfrom(1024)
          print('信息>>>>:', msg.decode('utf8'))
          print('信息来自>>>>:', addr)
          message = input('回复的信息>>>>:').strip()
          server.sendto(message.encode('utf8'), addr)

# 客户端
      import socket
      client = socket.socket(type=socket.SOCK_DGRAM)  # 指定协议为UDP协议
      while True:
          message = input('请输入要发送的信息>>>>:').strip()
          client.sendto(message.encode('utf8'), ('127.0.0.1', 9000))
          msg, addr = client.recvfrom(1024)
          print('信息>>>>:', msg.decode('utf8'))
          print('信息来自>>>>:', addr)

UDP协议没有建立链接通道的操作,从而也没有断开链接通道的需求。可以直接对某个地址发送信息,只需要在发送数据的时候进行地址的指定就可以发送。并且在发送信息的时候不需要对方确认接收。而且使用的接收和发送指令都是不同于TCP协议的。

并发预备理论

操作系统的发展史

  1. 穿孔卡片
      优点:一个人占据电脑
      缺点:CPU利用率低(由于穿孔卡片制作上传的过程,CPU都不工作)

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

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

总结:操作系统的发展史其实就是提升CPU利用率的过程

多道技术

这里需要注意的是,目前阶段,我们研究并发是基于单核CPU情况
 1. 串行:是指多个任务执行的顺序是类似于串起来的环节,总是在每一个任务做完以后才会执行下一个任务
 2. 多道:是指利用不同环节是否占用对不同的任务进行执行不同的阶段(从硬盘)

  • 空间上的复用:多任务共用一套计算机系统
  • 时间上的复用:切换 + 保存状态(是指在两种情况下CPU会被切换走)
     (1) 程序遇到IO操作时,CPU会自动切走
     (2) 程序长时间占用CPU,被系统发现后,也会强行切走CPU,保证其他程序的运行

进程理论

程序与进程

  • 程序:没有被执行的代码
  • 进程:正在被执行的代码
    进程概念的出现,就是为了精确描述一些代码的实际状态

进程调度算法发展史

  1. 先来的先服务(先来后到):存在对短进程不友好的问题
  2. 短作业优先(按进程需要时间由短到长进行排序,然后依次执行):存在对长进程不友好的问题
  3. 时间片轮转法与多级反馈队列
      时间片轮转法:先公平的将CPU分别给每个人执行(将固定的CPU执行时间,按照进程数分片,然后分给每一个进程)
      多级反馈队列:根据作业的长短的不同再合理分配CPU执行时间

进程调度算法的发展本质上也是为了让单核计算能够做到运行多个程序

重要概念

并发与并行

并发:看着像是多个进程在同时进行

类似于只有一个服务员的餐厅同时来了多位客人,并且还要服务好每位客人的问题。只有合理安排服务顾客A的空闲时间去服务其他客人才能保证服务各位客人,看似在服务多位客人,其实同一时间只服务了一位客人

并行:必须是多个进程在同时运行

以上面举得例子为例,如果想同一时间服务好每一位客人,那么就要求必须有与客人数相等的服务员数量
单核计算机只能实现并发,不能实现并行

高并发与高并行

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

同步与异步

  • 同步:提交任务后,等待任务的结果,并不做其他事情
  • 异步:提交任务后,去做其他事情,等到执行完有结果以后自动提醒、

阻塞与非阻塞

 这里需要介绍进程的三种状态:就绪态、运行态、阻塞态

  • 就绪态:程序才被执行前要处于就绪态

  • 运行态:程序被CPU执行过程中

  • 阻塞态:程序执行过程中有IO操作

  • 阻塞:进程处于阻塞态

  • 非阻塞:进程处于就绪态或者运行态
    想要提升程序的执行效率,就是要提升程序处于就绪态和运行态的时间比例(极致状态就是一直处于该状态)

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

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

  • 同步阻塞:排队的时候不做任何事
  • 同步非阻塞:排队的时候做其他事
  • 异步阻塞:在银行的椅子上坐着,等着排队且不做其他事
  • 异步非阻塞:在椅子上坐着,等排队的时候做其他事
posted @ 2022-04-18 23:22  Oliver-Chance  阅读(66)  评论(0编辑  收藏  举报