• day34


    回顾

    UDP协议

    ​ 用户数据报协议,是OSI模型中属于传输层的协议  --    提供,不可靠的,不要求顺序的,数据量小的,速度快的传输服务

    不可靠:   发送完成后不需要确认信息 并且立即删除缓存中的数据

    不要求顺序:  当一个数据较大时 会分为多个数据报来传输,对方无法获知数据的顺序,以及是否完整

    ​ 数据量较小的:  数据越大丢包的可能性越高 ,建议的数据量不要超过1472

    ​ 速度快: 相对于TCP而言快很多 不需要确认信息 ,也不需要建立链接

    通讯流程:如果TCP比喻为手机打电话的过程 那么UDP可以看做是对讲机

    ​ 1.买机器 创建UDP的socket

    ​ 2.固定频道 bind一个ip和端口

    ​ 3.收发数据 recvfrom sendto

    ​客户端

    ​ 1.买机器 创建UDP的socket

    ​ 2.收发数据 recvfrom sendto

    ​ 注意 不能先收 要收数据 必须明确端口号 没有端口号是不可能使用网络服务的

    TCP 与 UDP 的其他区别

    1.没有连接    2.不会粘包 每次发送都是一个独立的数据包

    TCP 对数据完整性要求较高 : 在线支付 ,文字信息

    UDP: 对数据不要求完整性 但是要快 : 视频 语音 游戏

     DNS

    域名解析服务器

    域名: 就是一串有规律的字符串 ,用于绑定IP,目的是为了方便记忆

    域名解析服务器 就是帮你将域名转换为ip地址

    本质就是一个数据库 里面存的就是域名和ip对应关系

    一台机器性能有限

    分为

    ​ 根域名服务器 只存储定义域名服务器的信息

    ​ 顶级域名服务器 只存储二级域名服务器的信息

    ​ 二级域名服务器 二级存三级

    ​ 三级域名 三级可以存四级 通常直接存储具体的ip信息

    ​ .....................

    ​ 本地DNS 用于加速解析

    自己搭建DNS 的作用

    ​ 1.CDN 内容分发网络 就是在你的周围建立更多镜像服务

    ​ 2.集群

     操作系统, 也是一个软件:受保护的不能随意修改

    ​ 代码量巨大 内核在500万以上;长寿 ,一旦完成一般不改

    ​ linux是脱袜子 将(shell 保留解释权!) 移植到minux上 结合产生的

    操作系统的作用:

    1.将复杂丑陋的硬件细节隐藏起来,提供了简单的调用接口

    2.将应用程序对于硬件的竞争变的有序

    操作系统发展史

    ​ 1.第一带计算机 真空管和穿孔卡片 没有进程 没有操作系统

    ​ 2.第二代计算机 7094 1401 晶体管 批处理系统

    ​ 输入输出 以及计算设备 不能互联 需要人参与 一批一批的处理 开发效率慢 并且串行执行

    ​ 3.第三代计算机 集成电路 与多道技术 -- 单核并发

    ​ 多终端联机 spooling 同一台机器既能进行科学计算 又能做字符处理 通用计算机

    ​ 多道技术 解决串行导致的效率低下问题

    ​ 多用户终端 可以同时为多个用户提供服务 每个用户以为自己独享一台计算机

    ​ 4.第四代 个人电脑

    ​ 大规模使用了集成电路,大多都提供了GUI界面

     多道技术

    ​ 产生背景 ,所有程序串行 导致资源浪费

    ​ 目的是让多个程序可以并发执行 , 同时处理多个任务

    关键技术

    空间复用:指的是 同一时间 内存中加载多个不同程序数据; 每个进程间内存区域相互隔离,物理层面的隔离

    时间复用:【切换 + 保存】

    切换条件:

    1.一个进程执行过程中遇到了IO操作 切换到其他进程

    2.运行时间过长,会被操作系统强行剥夺执行权力

    单纯的切换不够,必须在切换前保存当前的状态,以便于恢复执行

    进程

    一个正在被运行的程序就称之为进程,是程序具体执行过程,一种抽象概念

    进程来自于操作系统

    多进程

    进程和程序的区别

    程序就是一堆计算机可以识别文件,程序在没有被运行就是躺在硬盘上的一堆二进制

    运行程序时,要从硬盘读取数据到内存中,CPU从内存读取指令并执行 ,

    一旦运行就产生了进程

    一个程序可以多次执行 产生多个进程,但是进程之间相互独立

    当我们右键运行了一个py文件时 ,其实启动的是python解释器,py文件其实是当作参数传给了解释器

    阻塞 非阻塞 并行 并发 (重点)

    阻塞 : 程序遇到io操作是就进入了阻塞状态

    ​ 本地IO input print sleep read write

    ​ 网络IO recv send  accept

    非阻塞: 程序正常运行中 没有任何IO操作 就处于非阻塞状态

    阻塞 非阻塞 说的是程序的运行状态

    并发: 多个任务看起来同时在处理 ,本质上是切换执行 速度非常快

    并行: 多个任务真正的同时执行 必须具备多核CPU 才可能并行

    并发 并行 说的是 任务的处理方式

    三种状态的切换: 运行  <-(运行时间过长,超过cpu时间片)-> 就绪 ;    运行  --(IO)-> 阻塞 -->就绪; 

    程序员永恒的话题

    提高效率

    根本方法就是让程序尽可能处于运行状态

    减少IO 尽可能多占用CPU时间

    缓冲区就是用于减少IO操作的

    进程的创建以及销毁 了解

    菜谱: 就是程序

    做菜的过程:就是进程

    进程的两种使用方式 (重点)

    1.直接实例化Process ,将要执行任务用target传入

    2.继承Process类 ,覆盖run方法 将任务放入run方法中

    ```python
    import os
    from multiprocessing import Process
    class MyProcess(Process):
    def __init__(self,name):
    super().__init__()
    self.name = name
    # 继承Procee覆盖run方法将要执行任务发到run中
    def run(self):
    print(self.name)
    print("子进程 %s running!" % os.getpid())
    print("子进程 %s over!" % os.getpid())

    if __name__ == '__main__':
    # 创建时 不用再指定target参数了
    p = MyProcess("rose")
    p.start()
    print("父进程over!")
    ```

     join函数 (重点)

    Process的对象具备一个join函数

    用于提高子进程优先级 ,使得父进程等待子进程结束

    僵尸与孤儿进程 了解

    孤儿进程

    指的是,父进程先结束 ,而子进程还在运行着,

    孤儿进程无害,有 其存在的必要性

    例如:qq开启了浏览器,qq先退出了 浏览器应该继续运行

    孤儿进程会被操作系统接管

    僵尸进程

    指得是,子进程已经结束了,但是操作系统会保存一些进程信息,如PID,运行时间等,此时这个进程就称之为僵尸进程

    僵尸进程如果太多将会占用大量的资源,造成系统无法开启新新进程

    linux 中有一个wai/waitpid 用于父进程回收子进程资源

    python会自动回收僵尸进程

    # 常用属性

    ```python
    # p.join() # 等待子进程结束
    # p.terminate() # 终止进程
    # print(p.name) # 进程的名称
    # print(p.is_alive()) #是否存活
    # p.terminate() # 与start一样 都是给操作系统发送指令 所以会有延迟
    # print(p.is_alive())
    # print(p.pid)
    # print(p.exitcode) # 获取退出码

  • 相关阅读:
    PHP 如何安全的使用 MySQL ?
    IntelliJ IDEA 内存优化最佳实践
    当我们在谈论 DevOps,我们在谈论什么?
    第84节:Java中的网络编程(中)
    Java工程师必备
    Java工程师必备
    第83节:Java中的学生管理系统分页功能
    第83节:Java中的学生管理系统分页功能
    第82节:Java中的学生管理系统
    第82节:Java中的学生管理系统
  • 原文地址:https://www.cnblogs.com/qingqinxu/p/10957545.html
Copyright © 2020-2023  润新知