pythonweb网络通信模型

  1. 进程间通信

    共享内存 : 在内存中开辟共享空间,效率高,只能存一个数据

    Value() ---》 简单的单一数据
    

    Array() —> 存放数组,字符串

    信号量 : Semaphore() 创建信号量对象
    acquire() 消耗一个信号量
    release() 增加一个信号量

  2. 线程

【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. 线程通信

【1】通信方法 : 全局变量
【2】同步互斥方法:
* Event() set() clear() wait() is_set()
* Lock() acquire() release()

  1. GIL : python线程效率低

    Single cpu: 8.741527318954468
    Single IO: 4.938008546829224

    Process cpu: 4.197184801101685
    Process IO: 3.505187511444092

    Thread cpu: 12.497100830078125
    Thread IO: 5.233377933502197

    结论: 在无阻塞情况下,多线程程序和单线程执行效率接近,甚至不如单线程效率。但是多进程可以明显提高程序运行效率。


一. 进程线程的区别联系

  1. 区别联系
    【1】两者都是多任务编程方式,都能使用计算机多核资源
    【2】进程的创建删除消耗的计算机资源比线程多
    【3】进程空间独立,互不干扰,有专门的通信方法,线程使用全局变量通信,共享进程空间
    【4】一个进程可以有多个分支线程,两者有包含关系
    【5】进程线程都存在共享资源操作,但是线程这种情况更多,需使用同步互斥方法处理
    【6】进程线程在系统中都有自己的特征属性,如ID,命令集等

  2. 使用情形

【1】任务场景:如果是一个任务中的不同分支,优先线程。如果是多个独立任务(比如前后端分离)可能用多进程

【2】项目结构:多种编程语言实现不同任务模块往往是多进程

【3】语言特点,难易程度:python线程效率低,高延迟IO可以用线程,计算程序用进程。多进程通信成本高,或者多线程同步互斥处理复杂,则可能用另外一种。

要求:1. 对进程线程怎么理解/说说对进程线程的认识
2. 进程间通信知道哪些,有什么特点
3. 什么是同步互斥,什么情况下使用
4. python线程效率低,怎么办
5. 僵尸进程怎么处理
6. 给一个情形,问怎么用进程/线程处理

二. 网络通信模型

  1. 通信模型分类

    【1】循环服务器模型:循环接收客户端请求,处理请求。同一时刻只能处理一个请求,处理完毕后再处理下一个。

    优点: 实现简单,占用资源少
    缺点:无法同时处理多个客户端请求

    适用情况:访问量少,处理的任务可以很快完成,客户端无需长期占用服务器。udp比tcp更适合循环

    【2】 IO并发模型:利用IO多路复用等技术,同时处理多个客户端IO请求。

       优点: 资源消耗少,可以同时处理多个IO,效率较高
    

    缺点: 只能处理IO行为,无法处理cpu运算

    使用情况:HTTP请求,网络传输等都是IO行为,可以充分利用IO多路复用

    【3】 多进程/线程并发:当一个客户端连接服务器,就创建一个新的进程/线程为客户端服务,客户端退出时再销毁该进程/线程

    优点: 能够满足客户端长期占有服务器,处理各种请求
    缺点: 消耗资源较大

    适用情况:客户端同时连接数不会太多,且更客户端处理任务复杂需要长期占有服务端时比较合适

  2. 多进程网络并发

    【1】 基于fork的多进程并发

    1. 创建监听套接字
    2. 等待客户端请求
    3. 客户端连接后创建新的进程处理客户端请求内容
    4. 原进程继续等待其他客户端连接
    5. 如果客户端退出则销毁对应进程

三. ftp文件服务器

  1. 功能
    【1】 分为服务端和客户端,要求可以有多个客户端同时操作
    【2】 客户端可以查看服务端文件库中的文件
    【3】 客户端可以从文件库中下载文件到本地
    【4】 客户端可以将本地文件上传到服务端文件库
    【5】 使用print在客户端打印一定的命令提示界面,引导操作

  2. 技术分析

    【1】 fork多进程并发模型
    【2】 tcp套接字
    【3】 获取文件列表 : os.listdir()
    判断文件类型 : os.path.isfile()

  3. 结构设计

    【1】 网络搭建使用函数封装
    【2】 将文件操作功能封装在类中

  4. 具体功能分析

    【1】 网络搭建

    【2】 查看文件列表
    【3】 下载文件
    【4】 上传文件

    • 客户端发起请求
    • 服务端接收请求后给客户端返回确认信息
    • 客户端和服务端进行数据传输

【5】 客户端退出

作业 :

  1. 整理ftp文件服务器代码思路
  2. 复习http协议和httpserver v1.0

你可能感兴趣的:(python-web)