zoukankan      html  css  js  c++  java
  • pythonNet08并行

    前情回顾
    1. 信号处理   signal()
       * 异步通信方式 ---》 同步执行 异步执行

    2. 信号量   Semaphore()
            acquire()  删除
     release()  增加
     get_value()  获取

    3. 同步互斥机制 :
         解决了多个进程或者线程对共享资源的争夺
         Event   e.set  e.clear  e.wait
         Lock    lock.acquire()   lock.release()

    4. 什么是线程 
       threading
          Thread()
          t.start()
          t.join()

          t.name  t.getName t.setName  t.daemon  t.is_alive()
      
    5. 自定义线程类  
        继承 Thread 
        重写 run

    6. 线程通信
       使用全局变量通信
       线程的同步互斥

    7.  Python线程 GIL
          影响 : 同一时刻只能解释一个线程,造成python线         程效率低
          python线程 : 适用于高阻塞IO程序

    **************************************************
    进程线程的区别和联系

    1. 两者都是多任务编程方式,都能够使用计算机的多核资源
    2. 进程的创建删除消耗的计算机资源比线程要多
    3. 进程空间独立,数据相互不干扰,有专门的IPC,线程使    用全局变量进行通信
    4. 一个进程可以创建多个线程分支,两者之间存在包含关系
    5. 多个线程公用进程的资源,在资源操作时往往需要同步互    斥
    6. 进程线程在系统中都有自己特有的属性,ID,代码段,栈    区等资源

    使用场景
    * 需要创建较多并发,同时任务关联性比较强时一般用多线   程
    * 不同的任务模块可能更多使用进程
    * 使用进程线程需要考虑数据的处理复杂度,比如进程间通   信是否方便,同步互斥是否过于复杂

    要求 :
    1. 进程线程的区别和联系
    2. 进程间通信方式都知道哪些,有什么特点
    3. 同步互斥意义是什么,什么情况下用
    4. 给一个情形,分析下用进程还是用线程,理由
    5. 一些常见概念挖掘 : 僵尸进程,  进程状态,GIL

    司机和售票员的故事
       * 创建父子进程分别代表司机和售票员
       * 当售票员收到SIGINT信号,给司机发送SIGUSR1信号此   时司机打印"老司机开车了"
         当售票员收到SIGQUIT信号,给司机发送SIGUSR2信号此时司机打印"车速有点快,系好安全带"
         当司机捕捉到SIGTSTP信号,给售票员发送SIGUSR1,售票员打印"到站了,请下车"
       * 到站后 售票员先下车,司机下车 (子进程先退出)

    服务器模型

    硬件服务器 : 主机  集群

    厂商 : IBM  HP   联想   浪潮


    软件服务器 :编写的服务端应用程序,在硬件服务器上运行,一般依托于操作系统,给用户提供一套完整的服务

    httpserver  ---》  处理http请求
    webserver ---》 网站的后端应用服务器程序
    邮箱服务器 --》 邮件处理
    ftp文件服务器 --》 文件的上传下载

    功能 : 网络连接   逻辑处理   数据交互   数据传输
            协议的实现

    结构 : c/s   客户端服务器模型
            b/s   浏览器服务器模型

    服务器目标 : 处理速度更快,并发量更高,安全性更强

    硬件 : 更高的配置,更好的集成分布技术,更好的网络优         化和网络安全技术

    软件 : 占用资源更少,运行更稳定,算法更优良,安全性         更好,并发性更高,更容易扩展

    基础服务端模型

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

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

        适用情况 : 处理的任务可以短时间完成,不需要建立             并发,更适合udp使用

    并发模型:能够同时处理多个客户端请求
        IO并发 : IO多路复用
            优点 : 资源消耗少,IO处理速度快
     缺点 : 不能适用cpu密集型程序

        多进程/多线程并发:为每个客户端创建单独的进程线                     程,执行请求

            优点 : 每个客户端可以长期占有服务器运行程序
                    能够使用多核资源,可以处理IO或者cpu运算
     缺点 : 消耗系统资源高
     

    多进程并发模型

    使用fork实现多进程并发
    1. 创建套接字,绑定,监听
    2. 等待接收客户端请求
    3. 创建新的进程处理客户端请求
    4. 原有进程继续等待接收新的客户端连接
    5. 如果客户端退出则关闭子进程

    cookie:
    在父进程中忽略子进程状态改变,子进程退出自动由系统处理
    signal.signal(signal.SIGCHLD,signal.SIG_IGN)


    ftp文件服务器

    项目功能
    * 服务端和客户端两部分,要求启动一个服务端,可以同时   处理多个客户端请求
    * 功能 : 1. 可以查看服务端文件库中所有的普通文件
              2. 从客户端可以下载文件库的文件到本地
       3. 可以将本地文件上传的服务端文件库
       4. 退出
    * 客户端使用print在终端打印简单的命令提示,通过命令   提示发起请求

    1. 技术分析 (fork  tcp 并发)
    2. 每个功能要单独封装,整体功能写在一个类中
    3. 如何搭建整体架构,完成网络通讯

    功能分析
    1. 获取文件列表
       客户端 :  * 发送请求
                  * 得到回复判断能否获取列表
           * 接收文件名称列表打印
       服务端 : * 接收请求
                 * 判断请求类型
          * 判断能否满足请求,回复信息确认
          * 执行请求发送文件列表
       
    cookie:

    os.listdir(path)  获取目录中文件列表
    os.path.isfile()  判断是否为普通文件
    os.path.isdir()  判断是否为目录

    2 文件下载
      客户端 : * 发送请求 (文件名)
                * 得到回复判断能否下载
         * 下载文件

      服务端 : * 接收请求
                * 判断请求类型
         * 判断能否满足请求,回复信息确认
         * 执行请求发送文件

     

  • 相关阅读:
    正则表达式:(?=a)是什么意思?
    炫酷的 CSS 形状(值得收藏)
    右边菜单侧拉框
    iframe的父子层跨域 用了百度的postMessage()方法
    二级联动菜单
    一个类似职位选择的二级多选
    iOS sharedk短信分享
    Xcode6新建项目没有.pch
    iOS An error was encountered while running (Domain = FBSOpenApplicationErrorDomain, Code = 4)
    转 UINavigationController标题文字颜色
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9839298.html
Copyright © 2011-2022 走看看