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