首页 > 编程语言 >进入python的世界_day33_网络编程—— 黏包现象、UDP协议、并发编程理论

进入python的世界_day33_网络编程—— 黏包现象、UDP协议、并发编程理论

时间:2022-11-17 20:55:06浏览次数:45  
标签:UDP addr python 黏包 编程 server 并发 CPU socket

一、黏包现象

1.何为黏包


​ 流逝协议:所有的数据类似于水流 连接在一起的
​ 数据量很小 并且时间间隔很多 那么就会自动组织到一起

recv

​ 我们不知道即将要接收的数据量很大 如果 知道的话 不会产生也不会产生黏包

2.如何解决

​ 首先我们看以下不依赖模块自己手动调整——手动改接收字节长度参数

  • 一个中文三个字节没忘记吧?

​ 但是呢,我们用户传数据我们怎么能预测刚好他传过来的数据占多少字节,所以我们只能用一个新的模块,struct模块来做先锋兵。

3.struct模块

​ 其实很好理解,就是在传真正的数据前,把数据转成bytes类型,然后用struct模块封一个固定长度的报头,报头里有真正数据的长度,然后把这个报头先传给接收端,然后再传真正的数据。

​ 接收端收到报头反解析出真实数据长度,然后坐等收到完整的真是数据即可(注意,反解析的时候会得到一个元组,记得取索引0)

二、UDP协议

UDP不需要考虑黏包问题(UDP多用于短消息交互)
服务端不需要考虑客户端异常退出,硬传就完事,但是注意,服务端关闭后,虽然客户端可以继续传,但是服务端再上线也看不到消息了。

# 服务端
import socket

server = socket.socket(type=socket.SOCK_DGRAM)  # UDP协议
server.bind(('127.0.0.1', 8080))

while True:
    data, addr = server.recvfrom(1024)
    print('客户端地址>>>:', addr)
    print('上述地址发送的消息>>>:', data.decode('utf8'))
    msg = input('>>>:').strip()
    server.sendto(msg.encode('utf8'), addr)
# 客户端
import socket


client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8080)

while True:
    msg = input('>>>:').strip()
    client.sendto(msg.encode('utf8'), server_addr)
    data, addr = client.recvfrom(1024)
    print(data.decode('utf8'), addr)

三、操作系统发展史

1.穿孔卡片

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

2.联机批处理系统

​ 缩短录入数据的时候 让CPU连接工作的时间变长>>>:提升CPU的利用率

3.脱机批处理系统

​ 是现代计算机的雏形>>>:提升CPU利用率

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

四、多道技术

  • 前提:一般而言,默认一台电脑就一个CPU(什么双路E5洋垃圾只是极个别),CPU是真正的干活人

1.单道技术

​ 所有的程序排队执行 总耗时是所有程序耗时之和

2.多道技术

​ 计算机利用空闲时间 提前准备好一些数据 提高效率 总耗时较短

多道技术详细
	1.切换
  	计算机的CPU在两种情况下会切换(不让你用 给别人用)
    	1.程序有IO操作
      	输入\输出操作
        	input、time.sleep、read、write
  		2.程序长时间占用CPU	
      	我们得雨露均沾 让多个程序都能被CPU运行一下 

  2.保存状态
  	CPU每次切换走之前都需要保存当前操作的状态 下次切换回来基于上次的进度继续执行
  • 助记:

    ​ 其实就好比做饭,扫地、洗衣服

    ​ 煮饭的时候可以洗衣服、扫地之类的

五、进程理论

1.解释进程与程序的区别

​ 程序就是写好了的一堆代码堆叠而成,还没被运行

​ 进程就是进行中的程序,被运行了这样

2.进度的调度算法

  • 1.FCFS first come first service

    ​ 先来先执行,对短作业不友好,可以理解为排队办理业务前面的人先来,但是有一大堆业务要办,这就会让后面只办理一个业务的人等很久

  • 2.短作业优先调度

    短的先上去执行,对长作业不友好

  • 3.时间片轮转法+多级反馈队列(目前还在用)
    将时间均分 然后根据进程时间长短再分多个等级
    等级越靠下表示耗时越长 每次分到的时间越多 但是优先级越低

3.进程的三个状态

就绪态、运行态、阻塞态

1. 所有进程要想被运行 必须先经过就绪态
2. 运行过程中如果出现了IO操作 则进入阻塞态,比如time.sleep() 
3. 运行过程中如果时间片用完 则继续进入就绪态
4. 阻塞态想要进入运行态 必须先经过就绪态

六、进程的并行与并发

并行

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

并发

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

如果说到了并发,就是以为程序服务多个用户,不是单单的服务一个

标签:UDP,addr,python,黏包,编程,server,并发,CPU,socket
From: https://www.cnblogs.com/wznn125ml/p/16900916.html

相关文章

  • 黏包现象、struct模块和解决黏包问题的流程、UDP协议、并发编程理论、多道程序设计技
    目录黏包现象二、struct模块及解决黏包问题的流程三、粘包代码实战UDP协议(了解)并发编程理论多道技术进程理论进程的并行与并发进程的三状态黏包现象什么是粘包1.服务......
  • 计算机网络——并发编程理论、多道技术、进程理论、进程的并行与并、进程的三状态
    计算机网络——并发编程理论、多道技术、进程理论、进程的并行与并、进程的三状态一、并发编程理论"""计算机中真正干活的是CPU"""操作系统发展史 1.穿孔卡片阶段......
  • 并发编程理论
    网络编程研究网络编程其实就是在研究计算机的底层原理计算机中CPU才是真正干活的人并发编程理论发展史:1.穿孔卡片一次只能给一个人使用电脑cpu利用率极低......
  • 网络编程 黏包现象
    黏包问题1.服务端连续执行三次recv2.客户端连续执行三次send"""服务端一次性接收到了客户端三次的消息该现象称为黏包现象"""服务端:importsocketserver=sock......
  • 并发编程
    并发编程粘包现象1.粘包现象产生的本质sock.send(b'jason')data=client.recv(1024)print(data)对方只给了5个字符,但是后面我们返回是要返回1024个粘包现象的产......
  • 网络编程之黏包与struct模块、并发编程
    黏包现象1.服务端连续执行三次recv2.客户端连续执行三次send问题:服务端一次性接收到了客户端三次的消息,这种现象称为'黏包现象'黏包现象产生的原因1.不知道每次的数......
  • 并发编程理论
    操作系统发展史1.穿孔卡片阶段计算机很庞大,使用很麻烦,一次只能给一个人使用,期间很多时候计算机都不工作好处:程序员独占计算机,为所欲为 坏处:计算机利用率太低,浪费......
  • 并发编程理论之多道技术、进程
    并发编程理论之多道技术、进程操作系统的发展穿孔卡片1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式。程序员将对应用程序......
  • C++PrimerPlus中文第六版第7章编程练习答案
    1、#include<iostream>usingnamespacestd;doublecomputeHarmonicMean(doublex,doubley);intmain(){doublex,y;cout<<"Entertwonumbers(x!=0......
  • 并发编程
    目录黏包现象struct模块struct.pack()struct.unpack()文件过大无法打包黏包问题解决黏包实战UDP协议(了解)操作系统发展史穿孔卡片阶段联机批处理系统脱机批处理系统并发......