zoukankan      html  css  js  c++  java
  • 网络编程知识点

    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()取值,没有值不等待直接报错

    都不适用于多进程的情况

    生产者:生产/制造数据的
    消费者:处理数据的

  • 相关阅读:
    SpringBoot-配置Druid-yml方式
    CentOS7下配置Nginx并实现简单的负载均衡
    用私有构造器或者枚举类型强化Singleton
    virtualenv虚拟环境的使用
    Windows平台安装Python
    window平台基于influxdb + grafana + jmeter 搭建性能测试实时监控平台
    easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案
    npm install 报错: WARN checkPermissions Missing write access to 解决方案
    npm install 报错:ERR! code EINTEGRITY 解决方案
    最新版chrome浏览器如何离线安装crx插件?(转载)
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11340363.html
Copyright © 2011-2022 走看看