网络编程并发编程
内容概要
- UDP协议
- 基于UDP实现简易聊天
- 操作系统发展史
- 多道技术
- 进程简介
- 进程重要概念
UDP协议
# 服务端 import socket server = socket.socket(type=socket.SOCK_DGRAM) # 自己指定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) # 服务端接收到的消息 ''' msg>>>: hello server baby addr>>>: ('127.0.0.1', 61629) ''' # 客户端 import socket client = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1', 8080) # 查找通讯录 client.sendto(b'hello server baby', server_addr) msg, addr = client.recvfrom(1024) print('msg>>>:', msg.decode('utf8')) print('addr>>>:', addr) # 客户端接收到的消息 ''' msg>>>: hello baby addr>>>: ('127.0.0.1', 8080) '''
基于UDP实现简易聊天
服务端
import socket server = socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8080)) while True: msg, addr = server.recvfrom(1024) print(addr) print(msg.decode('utf8')) back_msg = input('请回复消息>>>:').strip() server.sendto(back_msg.encode('utf8'), addr)
客户端1
import socket client = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1', 8080) 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)
客户端2
import socket client = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1', 8080) while True: msg = input('请输入想要聊天的内容>>>:').strip() msg = '来自客户端2的消息:%s' % msg client.sendto(msg.encode('utf8'), server_addr) msg, addr = client.recvfrom(1024) print(msg.decode('utf8'), addr)
操作系统的发展史
-
穿孔卡片
优势:一个人独占电脑
劣势:CPU利用率极低
-
联机批处理系统
一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率

-
脱机批处理系统
是现代计算机核心部件的雏形、提高CPU的利用率
# 总结:操作系统的发展史其实就是提升CPU利用率的过程 '''为改善CPU的利用率,又引入了多道程序系统'''
多道技术
# 目的:提升CPU利用率 降低程序等待时间 '''强调:目前我们研究并发都是以计算机是单核的情况下:只有一个CPU''' 串行>>>: 多个任务排队执行 总耗时就是多个任务完整时间总合 多道>>>: 利用空闲提前准备 缩短总的执行时间并且还能提高CPU利用率 """ 多道技术 1.空间上的复用 多个任务共用一套计算机硬件 2.时间上的复用 切换+保存状态 CPU在两种情况下会被拿走 1.程序遇到IO操作 CPU自动切走运行其他程序 2.程序长时间占用CPU 系统发现之后也会强行切走CPU 保证其他程序也可以使用 """ 做饭需要30min 洗衣需要50min 烧水需要20min 串行总共需要耗时:30min + 50min + 20min 多道总共需要耗时:50min
进程简介
# 什么是程序、什么是进程 程序:一堆没有被执行的代码(死的) 进程:正在运行的程序(活的) # 为什么有进程的概念 就是为了更加精确的描述出一些实际状态 # 进程调度算法发展史 1.先来先服务 对短作业任务不太友好 2.短作业优先 多长作业任务不太友好 3.时间片轮转法与多级反馈队列 时间片轮转法:先公平的将CPU分给每个人执行 多级反馈队列:根据作业长短的不同再合理分配CPU执行时间 '''目的就是为了能够让单核的计算机也能够做到运行多个程序'''
重要概念*
# 并发与并行 并发 看上去像同时在执行就可以称之为是并发 """看起来同时执行:在短时间内几个任务来回切换执行并保存状态""" '单核肯定能够实现并发 但是不能实现并行!!!' 并行 必须同一时间同时运行才可以称之为并行 """单核计算机肯定不能实现并行!!! 必须要有多个CPU""" # 高并发与高并行 高并发:我们写的软件可以支持1个亿的并发量 一个亿的用户来了之后都可以感觉到自己被服务着 高并行:我们写的软件可以支持1个亿的并行量 上述话语的言外之意是计算机有一亿个CPU
# 同步与异步 同步 提交完任务之后原地等待任务的返回结果 期间不做任何事情 异步 提交完任务之后不愿地等待任务的结果 直接去做其他事情 有结果自动提醒 # 阻塞与非阻塞 进程三状态图 就绪态:程序之进入运行态之前肯定要处于就绪态 运行态:程序被CPU执行着 阻塞态:程序执行过程中有IO操作 ''' 如果想要尽可能的提升程序执行效率 就要想办法让我们的程序一直处于就绪态和运行态(不要有IO操作) ''' 阻塞:阻塞态 非阻塞:就绪态、运行态

同步异步与阻塞非阻塞结合
""" 同步异步:用来描述任务的提交方式 阻塞非阻塞:用来描述任务的执行状态 """ # 上述两组属于两个不同概念 但是可以结合 同步阻塞: 银行排队办理业务 期间不做任何事 同步非阻塞: 银行排队办理业务 期间喝水吃东西 但是人还在队列中 异步阻塞: 在椅子上坐着 但是不做任何事 异步非阻塞: "(程序运行的极致)" 在椅子上坐着 期间喝水吃东西办公
本文来自博客园,作者:{Mr_胡萝卜须},转载请注明原文链接:https://www.cnblogs.com/Mr-fang/p/16162652.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人