11月第3次周末总结
软件开发架构
-
C\S架构
client客户端
server服务端优点客户端可以高度定制化功能
缺点:需要下载 -
B\S架构
browser客户端
server服务端
优点:不需要下载,有浏览器开发提供统一的接口
缺点:功能固定,不能高度定制化,需要遵守很多规则
架构总结
ATM:三层架构
软件设计的大方向:统一接口
支付宝
微信
使用规划好的接口进行开发
OSI七层协议
- 应用层
- 表示层
- 会化层
- 传输层
- 网络层
- 数据链路层
- 物理层
物理层
主要用于确保计算机之间的物理连接媒介 接收数据是bytes类型,也就是二进制
数据链路层
以太网mac
网络层
ip arp
传输层
ip port tcp udp
tcp
三次握手
客户端 服务端
SYN-SENT syn=k seq=j SYN-RECEIVED
ESTABLLISHED ack=k+1 syn=i seq=m
ack=i+1 seq ESTABLISHED
四次挥手
客户端 服务端
FIN-WAIT fin ack CLOASE-WAIT
FIN-WAIT seq ack
还有未发送数据
TIME-WAIT fin ack LAST-ACK
TIME-WAIT seq ack CLOSED
tcp可靠的原因不是因为有双向管道而是有反馈机制
tcp在传输时首先会把数据备份一份,发送备份的如果接收失败,会在一定时间重新发送
udp
udp协议没有复杂的连接,只需要指定对方地址就可发送消息,不需要管对方收到了还是没收到消息,反正我发了
应用层
ssh http https
socket编程
socket类似于操作系统,提供了很多简单快捷的接口供我们使用
socket也叫套接字
基于文件AF_UNIX
基于网络AF_INET
半连接池概念
socket对象.listen(5) 3 半连接池
粘包现象
tcp是流水协议,tcp内部算法会把两次连续小数据,合并发送,所有造成了数据黏在一起,
解决方案就是首先发送固定长度数据报,然后接收真实数据,然后再接收真实数据
利用struct模块解决粘包问题
并发编程
单道技术:所有程序排队执行 过程中不能重合
多道技术:利用空闲时间准备其他数据 最大化提升cpu利用率
多道技术详细
切换 计算机遇到IO操作与长时间占用cpu会进行切换
保存状态:cpu每次切换的时候会保存,切换走之前的状态以保证,后续接着保存的状态继续服务
进程
进程与程序的区别
进程:是正在运行的程序
程序:是一堆死代码在硬盘上
进程调度算法
fcfs:先来先服务,对短作业不友好
短作业服务:对长作业不友好
时间片轮转+反馈机制:目前再用机制
将时间均分 然后根据进程时间的长短再分多个等级,等级越靠下表示耗时越长 每次分到的时间越多 但是优先级越低
并行与并发
并行:多个进程同时执行,不需要要有多个cpu参与 单个CPU无法实现
并发:多个进程看上去像同时执行 单个CPU可以实现 多个肯定可以
进程的三状态
就绪态:所有程序在被CPU执行前都会进入就绪态进行等待
运行态:CPU正在执行程序
阻塞态:进程运行过程中出现IO操作 阻塞态无法直接进入运行态,只能先进入就绪态后,在进入运行态
同步与异步
同步:提交任务后原地等待返回结果 期间不做任何事
异步:提交任务后不原地等待 直接去做其他事情
阻塞与非阻塞
阻塞:阻塞态
非阻塞:运行态,就绪态
同步阻塞运行效率最低
异步非阻塞运行效率最高
进程的多种方法
查看进程号
current_process.pid
os.getpid
os.getppid #获取创建这个进程的PID
终止进程
socket对象.terminate()
判断进程是否存活
socket对象.is_alive()
join方法
socket.join()等待这个进程运行完毕后才向下执行
进程之间的数据是相互隔离的,同一台计算机上的两个进程数据是严格意义上的物理隔离(默认情况下)
IPC机制
消息队列:存储数据的地方 所有人都可存 也可以取
队列:先进先出 堆栈先进后出
生产者消费者模型
生产者:负责产生数据的人
消费者:负责处理数据的人
该模型除了有生产者和消费者还要有消息队列(只要是能够提供数据和保存服务的理论上都可以)
守护进程:守护进程随着守护的进程结束立刻结束
僵尸进程:进程执行完毕后并不会立刻销毁所有的数据 可能会有一些信息短暂保留下来,进程号 进程执行时间 进程所消耗功率,所有的进程都会变成僵尸进程
孤儿进程:子进程正常运行,父进程意外死亡 操作系统针对子进程,会派遣一个程序去管理,我们把它当做,福利院
标签:11,总结,socket,ack,阻塞,tcp,周末,进程,数据 From: https://www.cnblogs.com/clever-cat/p/16909522.html