目录
一、UDP协议
1.服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
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)
2.客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
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)
3.注意
- 服务端不需要考虑客户端是否异常退出
- UDP不存在黏包问题(UDP多用于短消息的交互)
二、操作系统的发展史
学习并发编程其实就是在学习操作系统的发展史,也可以称为并发编程的发展史
三大核心硬件:
三大核心硬件 | 描述 |
---|---|
CPU | 计算机真正干活的人(CPU是整个计算机执行效率的核心) |
内存 | 给CPU准备需要运行的代码 |
硬盘 | 存储将来可能要被运行的代码 |
1.穿孔卡片
优势:程序员可以独占计算机,为所欲为
劣势:CPU利用率非常低
2.联机批处理系统
缩短录入数据的时候让CPU连续工作的时间变长
目的:提升CPU利用率
3.脱机批处理系统
现代计算机的雏形
目的:提升CPU利用率
4.总结
操作系统也可以看做是CPU利用率提升的发展史
三、多道技术
1.前提
一个核/一个CPU/一个真正干活的
单道/多道 | 描述 |
---|---|
单道技术 | 所有程序排队执行,总耗时是所有程序耗时之和 |
多道技术 | 计算机利用空闲时间提前准备好一些数据,提高效率,总耗时较短 |
单道工作实例:
多道工作实例:
2.切换+保存状态
2.1.切换
CPU在两种情况下会切换(去执行其他程序)
-
程序自身进入IO操作
- IO操作:输入输出操作
-
程序长时间占用CPU
2.2.保存状态
每次切换之前要记录下当前的记录状态,之后切回来基于当前状态继续执行
2.3.例
做饭耗时50min、洗衣耗时30min、烧水耗时10min
单道技术:50+30+10
多道技术:50
四、进程
1.进程理论
1.1.程序
一堆躺在文件上的死代码
1.2.进程
正在被运行的程序(活的)
1.3.进程的调度算法
- 先来先服务算法:针对耗时较短的程序不友好
- 短作业优先调度:针对耗时较长的程序不友好
- 时间片轮法+多级反馈队列:将固定的时间分成很多份,所有程序来了都公平的分一份,分配多次之后如果还有程序需要运行,则将其分到下一层,越往下表示程序总耗时越长,每次分的时间片越多优先级越低
2.进程的并行与并发
并行/并发 | 描述 |
---|---|
并行 | 多个进程同时进行,单个CPU无法实现并行,必须要有多个CPU |
并发 | 多个进程看上去像同时执行,单个CPU完全可以实现并发的效果,如果是并行那么肯定也属于并发 |
如何描述一个网址非常牛逼,能够同时服务很多人
a.我这个网站很牛逼,能够支持14亿并行量(高并行)
- 不合理,没有那么多CPU(集群也不现实)
b.我这个网站很牛逼,能够支持14亿并发量(高并发)
- 非常合理
3.进程的三状态
- 所有的进程要想被运行,必须先经过就绪态
- 运行过程中如果出现了IO操作,则进入阻塞态
- 运行过程中如果时间片用完,则继续进入就绪态
- 阻塞态要想进入运行态必须先经过就绪态
3.1.就绪态
当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态
3.2.执行/运行态
当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态
3.3.阻塞态
正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等
五、同步和异步(重要)
用于描述任务的提交状态
名词 | 提交状态 |
---|---|
同步 | 提交任务之后原地等待任务结果,期间不做任何事 |
异步 | 提交任务之后不在原地等待直接去做其他事,结果自动提醒 |
六、阻塞与非阻塞(重要)
用于描述进程的执行状态
名词 | 执行状态 |
---|---|
阻塞 | 阻塞态 |
非阻塞 | 就绪态、运行态 |
七、同步异步与阻塞与非阻塞
名词 | 描述 |
---|---|
同步阻塞 | 在银行排队,在队伍里什么事都不做 |
同步非阻塞 | 在银行排队,在队伍里做其他事 |
异步阻塞 | 取号,在旁边座位等着叫号期间什么事也不做 |
异步非阻塞(效率最高) | 取号,在旁边座位等着叫号期间想干什么干什么 |