网络编程:基于UDP协议的socket基本使用、多道、进程理论、并发与并行、同步与异步、阻塞与非阻塞

2022.4.18 UDP协议实战、多道、进程理论

  • socket模块之UDP协议基本使用
  • 操作系统的发展史
  • 多道技术
  • 进程理论
  • 重要概念之并发与并行
  • 重要概念之同步与异步和阻塞与非阻塞

一、socket模块之UDP协议基本使用

1、服务端

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
import socket server = socket.socket(type=socket.SOCK_DGRAM) # type指定UDP协议,不写默认是TCP协议 server.bind(('127.0.0.1', 8080)) msg, addr = server.recvfrom(1024) # 接收数据 print('msg>>>:', msg.decode('utf8')) print('addr>>>:', addr) server.sendto(b'hello baby', addr) # 发送数据

2、客户端

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
import socket client = socket.socket(type=socket.SOCK_DGRAM) # 指定UDP协议 server_addr = ('127.0.0.1', 8080) # 查找通讯录 client.sendto(b'hello small baby', server_addr) # 发送数据 msg, addr = client.recvfrom(1024) # 接收数据 print('msg>>>:', msg.decode('utf8')) print('addr>>>:', addr)

如果需要实现像qq聊天窗类似的功能,只需要将客户端与服务端连接,然后加上while循环,不断发送和接收信息

二、操作系统的发展史

1、穿孔卡片

优势:一个人独占电脑

劣势:CPU利用率极低

Lwem59.jpg

2、联机批处理系统

一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率

LweLGR.md.png

3、脱机批处理系统

是现代计算机核心部件的雏形,提高CPU的利用率

LwmCIH.md.jpg

三、多道技术

目的:提升CPU利用率,降低程序等待时间

强调:目前我们研究并发都是以计算机是单核情况下,即只有一个CPU

1、串行

即多个任务排队执行,总耗时就是多个任务完整时间叠加

LwmZsf.md.png

2、多道

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

  • 空间上的复用(多任务)

    多个任务共用一套计算机,就是将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。

  • 时间上的复用(切换+保存状态)

    当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%

四、进程理论

1、什么是程序,什么是进程

程序:一堆没有被执行的代码(死的)

进程:正在运行的程序(活的)

2、为什么有进程概念和进程调度

前者:是为了更加准确描述出一些实际状态

后者:是为了能够让单核的计算机也能够做到运行多个程序

3、进程调度算法发展史

(1)先来先服务

复制代码
  • 1
对短作业任务不太友好

(2)短作业优先

复制代码
  • 1
多长作业任务不太友好

(3)时间片轮转法

复制代码
  • 1
CPU按照某个时间片段平均分给每个任务执行,每个任务执行时间是一致的

(4)多级反馈队列

先按照时间片轮转法分配片段给任务程序执行,然后程序根据作业长短的不同再合理分配CPU执行时间,如下图:

LwMF78.md.png

五、重要概念之并发与并行

1、并发与并行

并发:

看上去像是同时在执行就可以称为并发,实际上是在很短的时间内让CPU利用多道技术快速来回切换并保存状态

并行:

必须是同一时间同时运行才可以称为并行

因此:单核计算机肯定能实现并发,但一定不能实现并行,并行必须是多个CPU

高并发:

我们写的软件可以服务极多用户,即极多的并发量,不是同时运行,但是感觉都在被服务

高并行:

我们写的软件在同一时间支持极多的并行量,言外之意就是有极多cpu,有几个并行就用几个cpu

六、重要概念之同步与异步和阻塞与非阻塞

1、同步与异步

同步:

提交完任务之后原地等待任务的返回结果,期间不做任何事情

异步:

提交完任务之后不原地等待任务的结果,直接去做其他事情,有结果自动提醒(相当于分出一个分支去处理任务并得出结果返回给主程序)

Lw1F76.md.png

2、阻塞与非阻塞

进程三状态图:

就绪态:程序之进入运行态之前肯定要处于就绪态
运行态:程序被CPU执行着
阻塞态:程序执行过程中有IO操作

LwMm1s.md.png

阻塞:

即处于阻塞态

非阻塞:

即处于就绪态、运行态

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

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

两者相结合产生四个状态:同步阻塞、同步非阻塞、异步阻塞、异步非阻塞

同步阻塞:

eg:银行排队办理业务 期间不做任何事

提交完任务后等待结果过程中进入阻塞状态

同步非阻塞:

eg:银行排队办理业务 期间喝水吃东西 但是人还在队列中

提交完任务后等待结果时未进入阻塞状态,然后继续进入队列执行

异步阻塞:

eg:在椅子上坐着 但是不做任何事

提交完任务后让该任务等待结果,自己去处理其他任务,该任务过程中进入阻塞状态,阻塞态结束后返回结果

异步非阻塞:

eg:在椅子上坐着 期间喝水吃东西办公 (程序运行的极致)

提交完任务后让该任务等待结果并顺利执行完返回结果,自己去处理其他任务

posted @   马氵寿  阅读(207)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开