39章 并发章节-同步异步/阻塞/非阻塞
章节
UDP协议
-
udp实战模拟【服务端和客户端通信】
-
服务端代码
import socket
server = socket.socket(type=socket.SOCK_DGRAM) #指定udp协议
server.bind(('127.0.0.1', 8080))
msg, address = server.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
server.sendto('我是服务端 你好啊'.encode('utf8'), address)
--------服务端执行结果------------
msg>>>:我是服务端,你好啊
address>>>: ('127.0.0.1', 8080)
-
客户端代码
import socket
client = socket.socket(type=socket.SOCK_DGRAM) #指定udp协议
server_address = ('127.0.0.1', 8080)
client.sendto('我是客户端 想我了没'.encode('utf8'), server_address)
msg, address = client.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
----------------客户端收到结果----------
msg>>>:我是服务端,你好啊
address>>>: ('127.0.0.1', 8080)
操作系统的发展史
三大核心硬件
cpu:整个计算机执行效率的核心
内存:给cpu准备需要运行的代码
硬盘:永久存储将来可能需要被运行的代码
-
发展历史
-
1.穿孔卡片
cpu 利用率非常的低 好处是程序员可以一个人独占计算机,想干嘛,干嘛
-
2.联机批处理系统
缩短录入数据的时候,让cpu连续工作时间边长>>提升cpu利用率
-
3.脱机批处理系统
是现代计算机的雏形>>>:提升cpu利用率
总结:操作系统的发展史可以堪称cpu利用率提升的发展史
多道技术
-
单道技术
所有的程序排队执行,总耗时是所有程序耗时之和
-
多道技术
计算机利用空闲时间提前准备好一些数据,提高效率,总耗时较短
特点:
切换+保存状态 ------------------------------------------ #切换 1.cpu在以下两种情况(去执行其它程序) 1.程序自身进入IO操作 IO操作:输入输出操作 time.sleep() 读取文件 保存文件 2.程序长时间占用cpu --------------------------------------------- 2保存状态 每次切换都之前都要记录下当前执行状态,之后切回来基于当前状态继续执行
进程理论
-
进程定义
程序:一堆代码
进程:正在被运行的程序(活的)
注意:同一个程序执行两次,就会在操作系统中出现两个进程,所以我们可以同时运行一个软件,分别做不同的事情也不会混乱。
-
进程的调度算法
1.先来服务算法 针对耗时比较端的程序不友好 ------------------------------------------------- 2.短作业优先调度 针对耗时比较长的程序不友好 --------------------------------------------------- 3.时间片轮转法+多级反馈队列 将固定的时间均分成很多份,所有程序来了都公平的分一份 分配多次之后如果还有程序需要运行,则将其分到下一层 越往下表示程序总耗时越长,每次分的时间片越多,但是优先级越低
进程的并行与并发
-
什么是并行
多个进程同时执行
单个cpu肯定无法实现并行,必须有多个cpu
-
什么是并发
多个进程看上去像相同执行的就可以称之为并发
单个cpu完全可以实现并发效果,并行也属于并发
----高并发网站-----
12306
进程的三种状态
1.所有的进程要想被运行 必须先经过就绪态
2.运行过程中如果出现了IO操作 则进入阻塞态
3.运行过程中如果时间片用完 则继续进入就绪态
4.阻塞态要想进入运行态必须先经过就绪态
同步与异步(重要)
用于描述任务的提交状态
-
同步
提交完任务之后原地等待任务的结果 期间不做任何事
-
异步
提交完任务之后不原地等待直接去做其他事 结果自动提醒
阻塞与非阻塞
用于描述进程的执行状态
-
阻塞
在调用结果返回前,当前线程会被挂起,一直得到结果之后返回
-
非阻塞
如果不能立刻得到结果,则该调用者不会阻塞当前线程,程序会定期轮询处理查看当前状态,有结果才会返回
-
同步阻塞
在提交任务后,一直在等待返回结果通知,阻塞是提交和返回的过程中,不能做其它处理操作。
-
同步非阻塞
提交任务后,同步体一直等待返回结果通知,非阻塞会对进行其它处理操作;不过会定期轮询查看同步体的返回结果状态
-
异步阻塞
提交任务后,不用原地等待返回结果,阻塞体在等待过程中,不做其它操作。
-
异步非阻塞
提交任务后,异步去做其他事情,等待返回结果通知,非阻塞如果不能立刻得到结果,会进行其它操作。一直等到返回结果