zoukankan      html  css  js  c++  java
  • 网络编程与并发编程(总结)

    网络编程
      软件开发架构
        c/s
          client
          server
        b/s
          broswer
          server
    ps:b/s本质上也是c/s架构


    OSI七层协议
      应用层
      表示层
      会话层
      传输层
      网络层
      数据链路层
      物理连接层


    物理连接层
      传输二进制的数据


    数据链路层(以太网协议)
      1.规定了二进制数据的分组依据
      2.规定了每台计算机都必须有一块网卡
        ps:网卡上刻有12位16进制的编号
          前6位厂商编号
          后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):唯一标识一台计算机上的某一个应用程序,port号是动态分配的并且是有限
      端口号的范围:0~65535
      0~1024通常是操作系统需要使用的端口号
      建议你使用8000之后的端口
      django默认端口 8000
      flask默认端口 5000
      redis 6379
      Mysql 3306


    应用层
      HTTP协议
      FTP协议

    IP+PORT能够唯一标识一台联入互联网的计算机上的某一个应用程序

    TCP协议
      三次握手
      四次挥手
      TCP之所以可靠的原因在于:反馈机制
      发送消息后必须等到对方回应 才会将内存中的数据清除

    UDP协议
      数据报协议
      无需双向通道
      数据是不安全的

    TCP类似于打电话
    UDP类似于发短信

    如何解决TCP的粘包问题
      基于TCP实现大文件的上传
      客户端:
        1.先生成一个字典
        2.制作字典的报头
        3.发送字典的报头
        4.发送字典数据
        5.发送真实数据
      服务端
        1.接收固定长度的报头
        2.解析获取字典的长度
        3.接收字典数据
        4.解析获取真实数据信息
        5.接收真实数据

    socketserver
      能够实现并发的效果

    并发:看上去像同时运行的
    并行:真正意义上的同时执行
    ps:单核的计算机绝对不可能实现并行 但是可以实现并发

    并发编程
      操作系统发展史
        基于单核研究
        多道技术
          1.空间上的复用
            多个程序公用一套计算机硬件
          2.时间上的复用
            切换+保存状态
            例子:洗衣 烧水 做饭
          切换
            1.程序遇到IO操作系统会立刻剥夺走CPU的执行权限
              IO:input,sleep,accept,recv...阻塞 日常生活中使用软件通常都是IO密集型
            2.当你的程序长时间占用CPU的时候也会被操作系统剥夺走cpu的执行权限

     

    进程理论

      进程调度
        时间片轮转法+多级反馈队列
      进程三状态图
        ps:程序不会立刻进入运行态 都会现在就绪态等待cpu的执行

    同步异步:指的是任务的提交方式
      同步:提交任务之后原地等待任务的返回结果 期间不做任何事
      异步:提交任务之后立刻执行下一行代码 不等待任务的返回结果
    >>> 结果的获取使用异步回调机制

    阻塞非阻塞:指的是程序的运行状态
      阻塞:阻塞态
      非阻塞:就绪态或者是运行态

    创建进程的两种方式
      使用使用Process实例化
      继承Process类重写run方法
      ps:windows在开启进程的时候必须在__main__代码块内,因为windows是以模块导入的方式从上执行代码


    什么是进程:
      正在运行的程序
        一个进程对应到内存中就是一块独立的内存空间

    join方法
      主进程等待某个指定的子进程运行结束,不影响其他子进程的运行

    进程对象及其他方法
      current_process().pid
      os.getpid
      os.getppid
      terminate()
      is_alive()

    守护进程
      daemon
      这一句化必须在start之前使用

    进程间数据是隔离的

    互斥锁(抢票实例)
      多个程序操作用一份数据的时候会出现数据错乱的现象
      如何避免:
        将操作数据的部分加锁处理
        会将并发变成串行牺牲了效率但是保证了数据的安全
      抢锁
        acquire()
      释放锁
        release()
      例子:抢厕所


    进程间通信IPC机制

    生产者消费者模型

    线程理论

    创建线程的两种方式

    线程间通信

    守护线程

    线程对象及其他方法

  • 相关阅读:
    5月29日实验报告
    实验报告(2019年4月30日)下半部分
    实验报告(2019年4月31日)
    实验报告(2019年4月17日)
    第五章 循环结构课后反思
    实验报告(2019年4月3日)
    第一次实验报告
    503小组第三章编程作业
    第九章 结构体与共用体
    第八章 指针实验
  • 原文地址:https://www.cnblogs.com/zhukaijian/p/11341001.html
Copyright © 2011-2022 走看看