网络编程:基于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利用率极低
2、联机批处理系统
一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率
3、脱机批处理系统
是现代计算机核心部件的雏形,提高CPU的利用率
三、多道技术
目的:提升CPU利用率,降低程序等待时间
强调:目前我们研究并发都是以计算机是单核情况下,即只有一个CPU
1、串行
即多个任务排队执行,总耗时就是多个任务完整时间叠加
2、多道
即利用空闲提前准备,缩短总的执行时间并且还能提高CPU利用率
-
空间上的复用(多任务)
多个任务共用一套计算机,就是将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。
-
时间上的复用(切换+保存状态)
当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%
四、进程理论
1、什么是程序,什么是进程
程序:一堆没有被执行的代码(死的)
进程:正在运行的程序(活的)
2、为什么有进程概念和进程调度
前者:是为了更加准确描述出一些实际状态
后者:是为了能够让单核的计算机也能够做到运行多个程序
3、进程调度算法发展史
(1)先来先服务
复制代码
- 1
对短作业任务不太友好
(2)短作业优先
复制代码
- 1
多长作业任务不太友好
(3)时间片轮转法
复制代码
- 1
将
按照某个时间片段平均分给每个任务执行,每个任务执行时间是一致的
(4)多级反馈队列
先按照时间片轮转法分配片段给任务程序执行,然后程序根据作业长短的不同再合理分配CPU执行时间,如下图:
五、重要概念之并发与并行
1、并发与并行
并发:
看上去像是同时在执行就可以称为并发,实际上是在很短的时间内让CPU利用多道技术快速来回切换并保存状态
并行:
必须是同一时间同时运行才可以称为并行
因此:单核计算机肯定能实现并发,但一定不能实现并行,并行必须是多个CPU
高并发:
我们写的软件可以服务极多用户,即极多的并发量,不是同时运行,但是感觉都在被服务
高并行:
我们写的软件在同一时间支持极多的并行量,言外之意就是有极多cpu,有几个并行就用几个cpu
六、重要概念之同步与异步和阻塞与非阻塞
1、同步与异步
同步:
提交完任务之后原地等待任务的返回结果,期间不做任何事情
异步:
提交完任务之后不原地等待任务的结果,直接去做其他事情,有结果自动提醒(相当于分出一个分支去处理任务并得出结果返回给主程序)
2、阻塞与非阻塞
进程三状态图:
就绪态:程序之进入运行态之前肯定要处于就绪态
运行态:程序被CPU执行着
阻塞态:程序执行过程中有IO操作
阻塞:
即处于阻塞态
非阻塞:
即处于就绪态、运行态
3、同步异步与阻塞非阻塞结合
同步异步:用来描述任务的提交方式
阻塞非阻塞:用来描述任务的执行状态
两者相结合产生四个状态:同步阻塞、同步非阻塞、异步阻塞、异步非阻塞
同步阻塞:
eg:银行排队办理业务 期间不做任何事
提交完任务后等待结果过程中进入阻塞状态
同步非阻塞:
eg:银行排队办理业务 期间喝水吃东西 但是人还在队列中
提交完任务后等待结果时未进入阻塞状态,然后继续进入队列执行
异步阻塞:
eg:在椅子上坐着 但是不做任何事
提交完任务后让该任务等待结果,自己去处理其他任务,该任务过程中进入阻塞状态,阻塞态结束后返回结果
异步非阻塞:
eg:在椅子上坐着 期间喝水吃东西办公 (程序运行的极致)
提交完任务后让该任务等待结果并顺利执行完返回结果,自己去处理其他任务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步