• 开发工程师必备————【Day05】UDP协议;进程的并发与并行


    今日内容概要

    • UDP协议
    • 操作系统的发展史
    • 进程的概念
    • 并发与并行
    • 同步异步与阻塞和非阻塞

    UDP协议

    1.服务端

    import socket
    server = socket.socket(type=socket.SOCK_DGRAM)
    server.bind(('127.0.0.1',8080))
    msg,addr = server.recvfrom(1024)
    print('msg>>>:%s'% msg.decode('utf8'))
    print('address>>>:',addr)
    server.sendto('我是服务端'.encode('utf8'),addr)
    
    
    
    D:\Python36\python36.exe "E:/pythonProject/Day38/01 udp通信协议/服务端.py"
    msg>>>:我是客户端
    address>>>: ('127.0.0.1', 63481)
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.客户端

    import socket
    
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_addr = ('127.0.0.1',8080)
    client.sendto('我是客户端'.encode('utf8'),server_addr)
    msg,addr = client.recvfrom(1024)
    print('msg>>>:%s'% msg.decode('utf8'))
    print('address>>>:',addr)
    
    
    
    D:\Python36\python36.exe "E:/pythonProject/Day38/01 udp通信协议/客户端.py"
    msg>>>:我是服务端
    address>>>: ('127.0.0.1', 8080)
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3.服务端不需要考虑客户端是否异常退出
    一个服务端同时与多个客户端进行信息交互,任何一个客户端断开都不影响服务端与其他客户端的交互。

    4.UDP不存在黏包问题(UDP多用于短消息的交互)
    服务端:

    import socket
    server = socket.socket(type=socket.SOCK_DGRAM)
    server.bind(('127.0.0.1',8080))
    msg,addr = server.recvfrom(1024)
    print(msg,addr)
    msg,addr = server.recvfrom(1024)
    print(msg,addr)
    msg,addr = server.recvfrom(1024)
    print(msg,addr)
    
    
    
    D:\Python36\python36.exe "E:/pythonProject/Day38/01 udp通信协议/服务端.py"
    b'\xe6\x9d\xa5\xe8\x87\xaa\xe5\xae\xa2\xe6\x88\xb7\xe7\xab\xaf2\xe7\x9a\x84\xe6\xb6\x88\xe6\x81\xaf\xef\xbc\x9a' ('127.0.0.1', 56916)
    b'\xe6\x9d\xa5\xe8\x87\xaa\xe5\xae\xa2\xe6\x88\xb7\xe7\xab\xaf2\xe7\x9a\x84\xe6\xb6\x88\xe6\x81\xaf\xef\xbc\x9a' ('127.0.0.1', 56916)
    b'\xe6\x9d\xa5\xe8\x87\xaa\xe5\xae\xa2\xe6\x88\xb7\xe7\xab\xaf2\xe7\x9a\x84\xe6\xb6\x88\xe6\x81\xaf\xef\xbc\x9a' ('127.0.0.1', 56916)
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    客户端:

    import socket
    
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_addr = ('127.0.0.1',8080)
    client.sendto('来自客户端2的消息:'.encode('utf8'),server_addr)
    client.sendto('来自客户端2的消息:'.encode('utf8'),server_addr)
    client.sendto('来自客户端2的消息:'.encode('utf8'),server_addr)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    操作系统的发展史

    复习:计算机三大核心硬件
    CPU:是计算机中真正干活的人,是整个计算机执行效率的核心
    内存:给CPU准备需要运行的代码
    硬盘:永存存储将来可能要被运行的代码

    1.穿孔卡片
    CPU利用率非常的低
    好处是程序员可以一个人独占计算机 想干嘛就干嘛

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

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

    多道技术

    1.前提条件
    一个核;一个CPU。

    2.概念
    单道技术
    所有的程序排队执行,总耗时是所有程序之和。
    请添加图片描述

    多道技术
    计算机利用空闲时间提前准备好一些数据,提高效率,总耗时较短。请添加图片描述

    3.多道技术详解
    切换+保存状态
    (1)CPU在两种下会切换(去执行其他程序)
    程序自身进入IO操作
    IO操作:即输入输出操作
    eg:获取用户输入;
    time.sleep();
    读取文件;
    保存文件
    程序长时间占用CPU
    (2)保存状态
    每次切换前要记录当前执行的状态,之后切回来基于当前状态继续执行。

    4.举个栗子
    做饭耗时50min
    洗衣耗时30min
    烧水耗时10min
    单道技术:50+30+10
    多道技术:50

    进程的概念

    1.如何理解进程
    程序:一堆躺在文件上的死代码;
    进程:正在被运行的程序(活的)

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

    3.进程的三状态(了解)
    图片解释:请添加图片描述
    (1)所有的进程要想被运行,必须先经过就绪态;
    (2)运行过程中如果出现了IO操作,则进入阻塞态;
    (3)运行过程中如果时间片用完,则继续进入就绪态;
    (4)阻塞态要想进入运行态必须先经过就绪态。
    举个栗子:
    请添加图片描述

    并发与并行

    1.概念
    并行——多个进程同时执行
    实现条件:单个CPU肯定无法实现并行 必须要有多个CPU
    并发——多个进程看上去像同时执行就可以称之为并发
    实现条件:单个CPU完全可以实现并发的效果 如果是并行那么肯定也属于并发

    2.举个栗子说明
    描述一个网址非常牛逼能够同时服务很多人的话术:
    (1)我这个网站很牛逼 能够支持14亿并行量(高并行)
    这句话不合理 哪有那么多CPU(集群也不现实)
    (2)我这个网站很牛逼 能够支持14亿并发量(高并发)
    这句话非常合理!!! 国内最牛逼的网站>>>:12306

    同步异步与阻塞和非阻塞(重要)

    1.同步与异步
    用来描述任务的提交状态
    (1)同步
    提交完任务之后原地等待任务的结果 期间不做任何事
    (2)异步
    提交完任务之后不原地等待直接去做其他事 结果自动提醒

    2.阻塞与非阻塞
    用于描述进程的执行状态
    (1)阻塞
    阻塞态
    (2)非阻塞
    就绪态或者运行态

    3.同步异步与阻塞非阻塞
    举个栗子环境为在银行办理业务:
    同步阻塞:在银行排队,并且在队伍中什么事情都不做。
    同步非阻塞:在银行排队,并且在队伍中做点其他事。
    异步阻塞:取号,在旁边座位上等着叫号,期间不做事。
    异步非阻塞:取号,在旁边座位上等着叫号,期间为所欲为。

  • 相关阅读:
    PRML 概率分布
    C语言实现《猜数字游戏》
    【超详细,面向初学者】如何用Idea快速创建一个MyBatis项目?导入坐标-创建数据库-成功运行示例
    并发编程7:线程池的使用
    学会使用这些电脑技巧,可以让你在工作中受益无穷
    CSS三大特性层叠性,继承性,优先级
    vivado BD_PIN、BD_PORT
    mysql之 Redis配置与优化
    算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)
    Python的文件操作
  • 原文地址:https://blog.csdn.net/DiligentGG/article/details/126230899