-
进程间通信
共享内存 : 在内存中开辟共享空间,效率高,只能存一个数据
Value() ---》 简单的单一数据
Array() —> 存放数组,字符串
信号量 : Semaphore() 创建信号量对象
acquire() 消耗一个信号量
release() 增加一个信号量 -
线程
【1】什么是线程?
【2】线程特点
【3】线程创建 threading
Thread()
start()
join()
【4】线程属性
t.name t.setName() t.getName()
t.daemon t.setDaemon() t.isDaemon()
t.is_alive()
【5】自定义线程类
1. 继承Thread
2. 编写自己的__init__ ,run方法
- 线程通信
【1】通信方法 : 全局变量
【2】同步互斥方法:
* Event() set() clear() wait() is_set()
* Lock() acquire() release()
-
GIL : python线程效率低
Single cpu: 8.741527318954468
Single IO: 4.938008546829224Process cpu: 4.197184801101685
Process IO: 3.505187511444092Thread cpu: 12.497100830078125
Thread IO: 5.233377933502197结论: 在无阻塞情况下,多线程程序和单线程执行效率接近,甚至不如单线程效率。但是多进程可以明显提高程序运行效率。
一. 进程线程的区别联系
-
区别联系
【1】两者都是多任务编程方式,都能使用计算机多核资源
【2】进程的创建删除消耗的计算机资源比线程多
【3】进程空间独立,互不干扰,有专门的通信方法,线程使用全局变量通信,共享进程空间
【4】一个进程可以有多个分支线程,两者有包含关系
【5】进程线程都存在共享资源操作,但是线程这种情况更多,需使用同步互斥方法处理
【6】进程线程在系统中都有自己的特征属性,如ID,命令集等 -
使用情形
【1】任务场景:如果是一个任务中的不同分支,优先线程。如果是多个独立任务(比如前后端分离)可能用多进程
【2】项目结构:多种编程语言实现不同任务模块往往是多进程
【3】语言特点,难易程度:python线程效率低,高延迟IO可以用线程,计算程序用进程。多进程通信成本高,或者多线程同步互斥处理复杂,则可能用另外一种。
要求:1. 对进程线程怎么理解/说说对进程线程的认识
2. 进程间通信知道哪些,有什么特点
3. 什么是同步互斥,什么情况下使用
4. python线程效率低,怎么办
5. 僵尸进程怎么处理
6. 给一个情形,问怎么用进程/线程处理
二. 网络通信模型
-
通信模型分类
【1】循环服务器模型:循环接收客户端请求,处理请求。同一时刻只能处理一个请求,处理完毕后再处理下一个。
优点: 实现简单,占用资源少
缺点:无法同时处理多个客户端请求适用情况:访问量少,处理的任务可以很快完成,客户端无需长期占用服务器。udp比tcp更适合循环
【2】 IO并发模型:利用IO多路复用等技术,同时处理多个客户端IO请求。
优点: 资源消耗少,可以同时处理多个IO,效率较高
缺点: 只能处理IO行为,无法处理cpu运算
使用情况:HTTP请求,网络传输等都是IO行为,可以充分利用IO多路复用
【3】 多进程/线程并发:当一个客户端连接服务器,就创建一个新的进程/线程为客户端服务,客户端退出时再销毁该进程/线程
优点: 能够满足客户端长期占有服务器,处理各种请求
缺点: 消耗资源较大适用情况:客户端同时连接数不会太多,且更客户端处理任务复杂需要长期占有服务端时比较合适
-
多进程网络并发
【1】 基于fork的多进程并发
- 创建监听套接字
- 等待客户端请求
- 客户端连接后创建新的进程处理客户端请求内容
- 原进程继续等待其他客户端连接
- 如果客户端退出则销毁对应进程
三. ftp文件服务器
-
功能
【1】 分为服务端和客户端,要求可以有多个客户端同时操作
【2】 客户端可以查看服务端文件库中的文件
【3】 客户端可以从文件库中下载文件到本地
【4】 客户端可以将本地文件上传到服务端文件库
【5】 使用print在客户端打印一定的命令提示界面,引导操作 -
技术分析
【1】 fork多进程并发模型
【2】 tcp套接字
【3】 获取文件列表 : os.listdir()
判断文件类型 : os.path.isfile() -
结构设计
【1】 网络搭建使用函数封装
【2】 将文件操作功能封装在类中 -
具体功能分析
【1】 网络搭建
【2】 查看文件列表
【3】 下载文件
【4】 上传文件- 客户端发起请求
- 服务端接收请求后给客户端返回确认信息
- 客户端和服务端进行数据传输
【5】 客户端退出
作业 :
- 整理ftp文件服务器代码思路
- 复习http协议和httpserver v1.0