• Day39 进程


    Day39 进程

    1、UDP协议

    UDP不需要考虑黏包问题(UDP多用于短消息交互)
    服务端不需要考虑客户端异常退出

    服务端

    import socket
    server = socket.socket(type = socket.SOCK_DGRAM)
    server.bind(('127.0.0.1',8080))
    msg,address = server.recvfrom(1024)
    print('msg>>>:%s'%msg.decode('utf8'))
    print('address>>>:',address)
    server.sendto('我是服务端 你好啊'.encode('utf'),address)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    客户端

    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    serverr_address = ('127.0.0.1',8080)
    client.sendto('我是客户端,我不好'.encode('utf8'),server_address)
    msg,address = client.recvfrom(1024)
    print('msg>>>:%s' % msg.decode('utf8'))
    print('address>>>:',address)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    说明

    开发编程前期学习阶段理论居多,后期才会有操作(调模块)
    学习并发编程就是在学习操作系统发展史
    也可以称之为并发编程发展史

    2、操作系统发展史

    穿孔卡片
    计算机初期 通过穿孔卡片与计算机交互
    CPU利用率非常的低,好处是那时候程序员可以一个人独占计算机,想干嘛就干嘛

    联机批处理系统
    缩短录入数据的时候 让CPU连接工作的时间变长>>>:提升CPU的利用率

    脱机批处理系统
    是现代计算机的雏形>>>:提升CPU利用率

    总结:
    操作系统发展史 可以看成是CPU利用率提升的发展史

    3、多道技术

    前提:一个核/一个CPU/一个真正干活的

    单道技术
    所有的程序排队执行 总耗时是所有程序耗时之和

    多道技术
    计算机利用空闲时间 提前准备好一些数据 提高效率 总耗时较短
    切换+保存状态

    1. 程序两种情况会切换(去执行其他程序)

      1. 程序自身进入IO操作
        IO操作:输入输出操作
        1. 获取用户输入

        2. time.sleep()

        3. 读取文件

        4. 保存文件

      2. 程序长时间占用CPU
    2. 保存在状态

      1. 每次切换之前要记录当前执行的状态 之后切换回来基于当前状态继续执行

    形象比喻
    做饭耗时 50min
    洗衣耗时 30min
    烧水耗时 10min
    单道技术:50-30-10
    多道技术:50

    4、进程理论

    如何理解进程
    程序:一堆躺在文件上的死代码
    进程:正在被运行的程序

    进程的调度算法

    1. 未来先服务算法
      针对耗时比较短的程序不友好
    2. 短作业优先调度
      针对耗时比较长的程序不友好
    3. 时间片轮转法+多级反馈队列
      将固定的时间均分成很多份 所有的程序来了都公平的份一份
      分配多次之后如果还有程序需要运行 则将其分到下一层
      越下表示程序总耗时越长 每次分的时间片越多,但是优先级越低

    4.1、进程的并行与并发

    并发
    多个进程同时执行
    单个CPU肯定无法实现并行 必须要有多个CPU(并行是真正的共同执行)

    并发
    多个进程看上去像同时执行就可以称之为并发
    单个CPU完全可以实现并发的效果 如果是并行那么肯定也属于并发

    描述一个网址非常牛逼能够同时服务很多人的话术

    1. 我这个网址很牛逼 能够支持14亿并行量(高并行)
      不合理 不可能有这么多CPU(集群也不现实)
    2. 我们这个网址很牛逼 能够支持14亿 并发量(高并发)
      非常合理!!!,国内最牛逼的网站>>>:12306

    4.2、进程的三状态

    1. 所有进程要想被运行 必须先经过就绪态
    2. 运行过程中如果出现了IO操作 则进入阻塞态
    3. 运行过程中如果时间片用完 则继续进入就绪态
    4. 阻塞态想要进入运行态 必须先经过就绪态
      在这里插入图片描述

    4.3、同步和异步(重点)

    主要用于描述任务的提交状态

    同步
    提交完任务之后原地等待任务的结果 期间不做任何事

    异步
    提交完任务之后不原地等待直接去做其他事 结果自动提醒

    4.4、阻塞与非阻塞(重点)

    用于描述进程的执行状态

    阻塞
    阻塞态

    非阻塞
    就绪态、运行态

    4.5、同步异步与阻塞非阻塞

    **同步阻塞:**在银行排队 并且在队伍中什么事情都不做
    **同步非阻塞:**在银行排队 并且在队伍中做点其他事
    **异步阻塞:**取号 在旁边座位上等着叫号 期间不做事
    **异步非阻塞:**在旁边座位上等着叫号 期间为所欲为

  • 相关阅读:
    【机器学习基础】多元线性回归(适合初学者的保姆级文章)
    物联网-UWB定位技术
    win10超好看的鼠标主题,你也来试试吧
    Flink1.16 发布新特性
    HTML+CSS美食静态网页设计——简单牛排美食餐饮(9个页面)公司网站模板企业网站实现
    【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
    【故障公告】周五下午的一次突发故障
    八、混合整数线性规划问题
    Ubuntu18.04安装Moveit框架
    通过 Express Migration 轻松迁移到 Elastic 的 AI 驱动日志分析
  • 原文地址:https://blog.csdn.net/weixin_71967396/article/details/126229732