并发编程(一)
UDP协议实现
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1',8082))
conn, addr = server.recvfrom(1024)
print(addr)
print(conn.decode('utf8'))
server.sendto('hello'.encode('utf8'),addr)
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1',8082)
client.sendto('你好啊!'.encode('utf8'),server_addr)
data,addr = client.recvfrom(1024)
print(addr)
print(data.decode('utf8'))
操作系统的发展史

"""
学习并发编程其实就是在学习操作系统 理论居多 实战很少 都是封装的代码
"""
1.穿孔卡片
优势:一个人独占电脑
劣势:CPU利用率极低
2.联机批处理系统
一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率
3.脱机批处理系统
是现代计算机核心部件的雏形、提高CPU的利用率
多道技术

'''强调:目前我们研究并发都是以计算机是单核的情况下:只有一个CPU'''
串行
多个任务排队执行 总耗时就是多个任务完整时间叠加
多道
利用空闲提前准备 缩短总的执行时间并且还能提高CPU利用率
"""
多道技术
1.空间上的复用
多个任务共用一套计算机硬件
2.时间上的复用
切换+保存状态
CPU在两种情况下会被拿走
1.程序遇到IO操作 CPU自动切走运行其他程序
2.程序长时间占用CPU 系统发现之后也会强行切走CPU 保证其他程序也可以使用
"""
进程理论
程序:一堆没有被执行的代码(死的)
进程:正在运行的程序(活的)
就是为了更加精确的描述出一些实际状态
1.先来先服务
对短作业任务不太友好
'长作业被服务后,后面的哪怕只有0.01秒的作业也到等'
2.短作业优先
对长作业任务不太友好
'假如有一万个短作业,一个长作业,那一万个短作业执行完了也要很长时间了'
3.时间片轮转法与多级反馈队列
时间片轮转法:先公平的将CPU分给每个人执行
多级反馈队列:根据作业长短的不同再合理分配CPU执行时间
'''目的就是为了能够让单核的计算机也能够做到运行多个程序'''
重要概念01(重要)
并发
看上去像同时在执行就可以称之为是并发
"""
类似于看上去很多功能在一起实现,实际上只运行了一个程序
烧烤摊,只有一个烧烤师傅,但是每一位顾客要吃的东西他都能满足,每位顾客都能被服务到
单核肯定能够实现并发 但是不能实现并行!!!
"""
并行
必须同一时间同时运行才可以称之为并行
"""单核计算机肯定不能实现并行!!! 必须要有多个CPU"""
高并发:我们写的软件可以支持1个亿的并发量
一个亿的用户来了之后都可以感觉到自己被服务着
高并行:我们写的软件可以支持1个亿的并行量
上述话语的言外之意是计算机有一亿个CPU
重要概念02(重要)

同步
提交完任务之后原地等待任务的返回结果 期间不做任何事情
异步
提交完任务之后不愿地等待任务的结果 直接去做其他事情 有结果自动提醒
进程三状态图
就绪态:程序之进入运行态之前肯定要处于就绪态
运行态:程序被CPU执行着
阻塞态:程序执行过程中有IO操作
'''
如果想要尽可能的提升程序执行效率
就要想办法让我们的程序一直处于就绪态和运行态(不要有IO操作)
'''
阻塞:阻塞态
非阻塞:就绪态、运行态
同步异步与阻塞非阻塞结合
同步异步:用来描述任务的提交方式
阻塞非阻塞:用来描述任务的执行状态
同步阻塞:银行排队办理业务 期间不做任何事
同步非阻塞:银行排队办理业务 期间喝水吃东西 但是人还在队列中
异步阻塞:在椅子上坐着 但是不做任何事
异步非阻塞:在椅子上坐着 期间喝水吃东西办公 (程序运行的极致)

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?