osi五层协议
一、物理连接层
传输二进制数据
二、数据链路层(以太网协议)
1、规定了二进制数据的分组依据
2、规定了每台计算机都必须有一块网卡
ps:网卡上刻有12位16进制编号
前6位厂商编号
后六位流水线编号
编号:mac地址,唯一标识一台计算机
1+2=以太网协议
基于以太网协议的通信基本靠吼
广播
单播
广播风暴
交换机
让连接了交换机的计算机实现彼此互联
局域网
构成互联网的基本单位
ps:以太网协议不能跨局域网传输
路由器
连接不同局域网
三、网络层
IP协议
规定任何接入互联网的计算机必须有一个IP地址
IP地址:点分十进制
版本:IPV4 IPV6
最小:0.0.0.0
最大:255.255.255.255
IP地址是动态分配的
arp协议
根据IP地址解析对方的mac地址
四、传输层
TCP UDP
基于端口工作的协议
端口:唯一标识一台计算机上的某一个应用程序,port号是动态分配并且有限的
端口号范围:0~65535
0~1024通常是操作系统需要使用的端口号
建议使用8000之后的端口
Django默认端口:8000
flask默认端口:5000
Redis默认端口:6379
MySQL默认端口:3306
五、应用层
HTTP协议 FTP协议
TCP协议
三次握手
四次挥手
TCP之所以可靠地原因在于反馈机制
发送消息后必须等到对方回应,才会将内存中的数据清除
UDP协议
数据报协议
无需双向通道
数据不安全
客户端:
1、生成字典
2、制作字典报头
3、发送字典报头
4、发送字典数据
5、发送真是数据
服务端
1、接收固定长度报头
2、解析获取字典长度
3、接收字典数据
4、解析获取真是数据信息
5、接收真实数据
基于TCP实现大文件上传
socketserver
实现并发效果
并发:看上去同时运行
并行:真正意义上同时运行
并发编程
操作系统发展史
基于单核研究
多道技术
1、空间上的复用
多个程序共用一套计算机硬件
2、时间上的复用
切换+保存状态
切换
1、程序遇到IO操作系统会立刻剥夺走CPU的执行权限
IO:input,sleep,accept,recv。。。
日常生活中使用软件都是IO密集型
2、程序长时间占用CPU时也会被操作系统剥夺走CPU执行权限
进程理论
进程调度
时间片轮转发+多级反馈队列
进程三状态图
ps:程序不会立刻进入运行态,都会在就绪态等待CPU执行
同步异步:指的是任务的提交方式
同步:提交任务后原地等待任务结果
异步:提交任务后立刻执行下一行代码 不等待任务的返回结果
阻塞非阻塞:指的是程序的运行状态
阻塞:阻塞态
非阻塞:就绪态或运行态
创建进程的两种方式
使用process实例化
继承process类重写run方法
ps:windous在开启进程的时候必须在__main__代码块内,因为Windows是以模块导入的方式执行代码
什么是进程:
正在运行的程序
一个进程对应到内存中就是一块独立的内存空间
join方法
主进程等待某个指定的子进程运行结束,不影响其他子进程的运行
进程对象及其他方法
current_process().pid
os.getpid()
os.getppid()
terminate()
is_alive()
守护进程
daemon
这句话必须在start之前使用
进程间数据时隔离的
互斥锁
多个程序操作同一份数据时会出现程序错乱的现象
避免方法
将操作数据的部分加锁处理
将并发变成串行,牺牲效率,保证数据安全
抢锁
acquire()
释放锁
release()
抢票实例
什么是线程
进程:资源单位
线程:执行单位
每个进程都自带一个线程,线程执行,进程提供执行所需资源
内存比喻为工厂
进程相当于车间
线程相当于流水线
开进程
1、申请内存空间
2、拷贝代码
开进程
一个进程内可以开多个线程,线程之间数据共享
开启线程的开销远远小于开启进程的开销
队列:先进先出
堆栈:先进后出
from multiprocessing import Queue
q = Queue(5) # 括号内可以传参数,表示队列最大值
队列满了后再放入数据会原地等待,直到队列中有数据被取走(阻塞态)
队列中的数据取完后再取,程序会阻塞,直到添加新数据
q.full()判断队列是否被塞满
q.empty()判断队列中数据是否被取完
q.get_nowait()取值,没有值不等待直接报错
都不适用于多进程的情况
生产者:生产/制造数据的
消费者:处理数据的
原文:https://www.cnblogs.com/binyuanxiang/p/11340363.html