并发编程1
目录
网络编程补充
UDP协议
# 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 9966)
send_msg = input('发送消息>>>:').strip()
client.sendto(send_msg.encode('utf8'), server_addr)
msg, addr = client.recvfrom(1024)
print(msg.decode('utf8'))
print(addr)
# 服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 9966))
msg, addr = server.recvfrom(1024)
print(msg.decode('utf8'))
print(addr)
reply_msg = input('回复消息>>>:').strip()
server.sendto(reply_msg.encode('utf8'), addr)
UDP的实际应用
# 聊天软件简易版本
# 服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 9966))
while True:
msg, addr = server.recvfrom(1024)
if msg.decode('utf8') == 'q':
print('对方以下线,聊天结束')
break
print('收到的消息', msg.decode('utf8'))
print('地址', addr)
reply_msg = input('回复消息,输入q退出>>>:').strip()
if reply_msg == 'q':
server.sendto(reply_msg.encode('utf8'), addr)
break
server.sendto(reply_msg.encode('utf8'), addr)
# 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 9966)
while True:
send_msg = input('发送消息,输入q退出>>>:').strip()
if send_msg == 'q':
client.sendto(send_msg.encode('utf8'), server_addr)
break
client.sendto(send_msg.encode('utf8'), server_addr)
msg, addr = client.recvfrom(1024)
if msg.decode('utf8') == 'q':
print('对方已下线,聊天结束')
break
print('收到的消息', msg.decode('utf8'))
print('地址', addr)
并发编程
操作系统的发展史
穿孔卡片阶段
- 特点一
用户独占全机。不会出现因资源已被其他用户占用而等待的现象。 - 特点二
CPU 等待手工操作。CPU的利用不充分。
联机批处理系统阶段
一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率
脱机批处理系统阶段
从输入机上读取用户作业并放到输入磁带上,再从输出磁带上读取执行结果并传给输出机。
主机不是直接与慢速的输入/输出设备打交道,而是与速度相对较快的磁带机发生关系,可以充分发挥主机的高速计算能力。
多道技术
串行
多个任务排队执行,总耗时就是多个任务执行所花费的时间相加
多道
利用空闲提前准备,缩短总的执行时间并且并提高CPU利用率
进程理论
程序和进程的概念
程序:就是代码堆叠并封装起来的应用软件,未被运行
进程:正在运行的程序
进程的概念
更加精确的描述程序运行的状态
进程调度算法发展史
1.先来先服务
对短作业任务不太友好
2.短作业优先
对长作业任务不太友好
3.时间片轮转法与多级反馈队列
时间片轮转法:先公平的将CPU分给每个程序执行
多级反馈队列:根据作业长短的不同再合理分配CPU执行时间
时间片轮转法与多级反馈队列能够让单核的计算机也能够做到运行多个程序
并发与并行的概念
并发
给人感觉在同时在执行程序或处理任务就可称之为并发
并行
必须同一时间同时运行程序或执行任务才可称之为并行
高并发与高并行
- 高并发:软件支持1个亿的并发量
一个亿的用户访问之后都可以感觉到自己在享受服务 - 高并行:软件支持1个亿的并行量
需要计算机有一亿个CPU来同时运行
同步与异步
同步
执行完任务之后原地等待任务的返回结果,期间处理其他任务
异步
提交完任务之后不原地等待任务的结果,直接去执行其他程序,前一个退出io状态后自动提醒
阻塞与非阻塞
进程三状态图
- 就绪态:程序之进入运行态之前处于就绪态
- 运行态:程序被CPU执行着
- 阻塞态:程序执行过程中有IO操作
阻塞:阻塞态
非阻塞:就绪态、运行态
同步异步与阻塞非阻塞结合
同步异步:用来描述任务的提交方式
阻塞非阻塞:用来描述任务的执行状态
同步异步与阻塞非阻塞自由组合
同步阻塞
出门办理业务时专心排队,什么别的事都不做。
同步非阻塞
出门办理业务期间玩手机,但人还在队列中
异步阻塞
在椅子上坐着休息,不做任何事情
异步非阻塞
在椅子上坐着玩手机办公两不误