昨日内容回顾
-
TCP与UDP协议
TCP协议 三次握手建立连接,四次挥手断开连接。
TCP协议的可靠性 完备的反馈机制。
TCP协议半连接池 限制同时连接数,保证服务器正常运作。
UDP协议 作用单一,仅负责数据的接收急发送,数据易丢失。
-
socket模块
套接字模块,分为基于文件类型的UNIX及基于网络的INET。
常见内置函数:bind、listen、connect、recv、send、accept、close
今日内容概要
- 粘包问题
- 粘包问题解决思路
- struct模块
- 操作系统发展史
- 多道技术
- 进程理论
今日内容详细
粘包问题
在TCP协议下传输为流式传输,受到TCP协议算法的影响,在传输数据时,若多次传输的数据量不大且发送间隔较小,TCP协议会默认将这些数据打包一起传送,造成所谓的粘包问题。
粘包问题的解决思路
粘包问题的本质是在传输时未对传输的数据进行明确的分段,若在传输时进行明确的分段,则可避免粘包问题。
struct模块
struct模块可以将传输的数据的长度进行包装,得到固定长度的包装信息,在一端发出包装信息之后,另一端先对收到的信息进行解析,分析出原信息的长度,再接收指定长度的信息,即可避免粘包问题。
# 客户端
info = 'This is a message.'
res = struct.pack('i', len(info.encode('utf8'))) # 对数据长度进行包装
print(len(res)) # 4
res1 = struct.unpack('i', res)
print(res1) # (18,)
struct模块无法对长度过大的数据进行打包或解析,因此,对数据长度较大的数据进行包装时,可先将该数据信息封入字典,先对该字典进行传送,然后,通过通道直接传送该数据。
操作系统发展史
第一阶段:穿孔卡片阶段,计算机很庞大,使用很麻烦 一次只能给一个人使用,期间很多时候计算机都不工作。
第二阶段:联机批处理系统,提前使用磁带一次性录入多个程序员编写的程序,然后交给计算机执行。
第三阶段:脱机批处理系统,通过中转机对主机内程序进行操作。
多道技术
单道运行即CPU在同一时间段内仅执行一个程序,一个程序运行完成后再去执行其他程序。
多道运行即CPU在一个时间段内,通过切换程序同时运行多个程序的运行。
多道运行的详细实现为:
切换 发生切换的情形有程序出现IO操作(输入、读写、阻塞)、程序长时间占用CPU。
保存 CPU切换程序时,会对当前程序的运行状态进行记录。
进程理论
基础知识
程序是代码,进程是在运行的程序。
进程的调度算法为时间片轮转法+多级反馈队列,首次运行分配相同时间,给定时间内未完成则分配更长时间。
并行与并发
并行 多个进程同时执行,必须要有多个CPU参与,单个CPU无法实现并行。
并发 多个进程看上去像同时执行,单个CPU可以实现,多个CPU肯定也可以。
进程的三状态
就绪态 所有的进程在被CPU执行之前都必须先进入就绪态等待。
运行态 CPU正在执行。
阻塞态 进程运行过程中出现了IO操作,阻塞态无法直接进入运行态,需要先进入就绪态。