首页 > 系统相关 >UDP协议和实战、并发编程理论、多道技术、进程理论

UDP协议和实战、并发编程理论、多道技术、进程理论

时间:2022-11-17 21:11:09浏览次数:43  
标签:addr UDP socket 理论 server msg CPU 多道

今日内容

  • UDP协议和实战

  • 并发编程理论

  • 多道技术

  • 进程理论

  • 进程的并行与并发

  • 进程的三状态

UDP协议

# 客户端
import socket

# 指定使用UDP协议, 不指定的话,默认为TCP协议
server = socket.socket(type=socket.SOCK_DGRAM)

server.bind(('127.0.0.1', 8080))

msg, addr = server.recvfrom(1024)  # recvfrom 是UDP协议的接收

print(msg.decode('utf8'))  # 解析发送来的内容
print(addr)  # 服务端的位置

server.sendto(b'wuhu, i am you father',addr)
  # 接收到('127.0.0.1', 52376)发来的hello i am superman
# 服务端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8888)
client.sendto(b'hello i am superman', server_addr)  # sendto就是UDP协议的发送

msg, addr = client.recvfrom(1024)
print(msg.decode('utf8'))
print(addr)
# 接收到('127.0.0.1', 8888)发来的wuhu, i am you father

UDP实战

基于UDP实现简易版qq
# 服务端

import socket
server = socket.socket(type= socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8888))
while True:
    msg, addr = server.recvfrom(1024)
    print(addr)
    print(msg.decode('utf8'))
    back_msg = input('请回复信息>>>:').strip()
    server.sendto(back_msg.encode('utf8'),addr)

# 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8888)

while True:
    msg = input('请输入要输入的内容>>>:').strip()
    msg = '这是来自客户端1号发来的信息: %s'%msg
    client.sendto(msg.encode('utf8'), server_addr)
    msg, addr = client.recvfrom(1024)
    print(msg.decode('utf8'), addr)
    
# 增加新的客户端时,代码不需要改变,只需要msg修改一些这是客户n发来的信息

并发编程理论

研究网络编程其实就是在研究计算机的底层原理及发展史	
"""
计算机中真正干活的是CPU
"""
操作系统发展史
	1.穿孔卡片阶段
    计算机很庞大 使用很麻烦 一次只能给一个人使用 期间很多时候计算机都不工作
    	好处:程序员独占计算机 为所欲为
        坏处:计算机利用率太低 浪费资源
    
	2.联机批处理系统
    提前使用磁带一次性录入多个程序员编写的程序 然后交给计算机执行
    	CPU工作效率有所提升 不用反复等待程序录入
     
    3.脱机批处理系统
    极大的提升了CPU的利用率
    
    总结:CPU提升利用率的过程

多道技术

"""
在学习并发编程的过程中 不做刻意提醒的情况下 默认一台计算机就一个CPU(只有一个干活的人)
"""
单道技术
	所有的程序排队执行 过程中不能重合
多道技术
	利用空闲时间提前准备其他数据 最大化提升CPU利用率
  
多道技术详细
	1.切换
  	计算机的CPU在两种情况下会切换(不让你用 给别人用)
    	1.程序有IO操作
      	输入\输出操作
        	input、time.sleep、read、write
  		2.程序长时间占用CPU	
      	我们得雨露均沾 让多个程序都能被CPU运行一下 

  2.保存状态
  	CPU每次切换走之前都需要保存当前操作的状态 下次切换回来基于上次的进度继续执行
 
"""
开了一家饭店 只有一个服务员 但是同时来了五桌客人
	请问:如何让五桌客人都感觉到服务员在服务他们
		让服务员化身为闪电侠 只要客人有停顿 就立刻切换到其他桌 如此往复
"""

进程理论

进程与程序的区别
	程序:一堆死代码(还没有被运行起来)
	进程:正在运行的程序(被运行起来了)
 
进程的调度算法(重要)
	1.FCFS(先来先服务)
  	对短作业不友好
	2.短作业优先调度
  	对长作业不友好
	3.时间片轮转法+多级反馈队列(目前还在用)
  	将时间均分 然后根据进程时间长短再分多个等级
    等级越靠下表示耗时越长 每次分到的时间越多 但是优先级越低

进程的并行与并发

并行
	多个进程同时执行 必须要有多个CPU参与 单个CPU无法实现并行
并发
	多个进程看上去像同时执行 单个CPU可以实现 多个CPU肯定也可以
 
判断下列两句话孰对孰错
	我写的程序很牛逼,运行起来之后可以实现14个亿的并行量
  	并行量必须要有对等的CPU才可以实现
  我写的程序很牛逼,运行起来之后可以实现14个亿的并发量
  	合情合理 完全可以实现	以后我们的项目一般都会追求高并发
ps:目前国内可以说是最牛逼的>>>:12306

进程的三状态

就绪态
	所有的进程在被CPU执行之前都必须先进入就绪态等待
运行态
	CPU正在执行
阻塞态
	进程运行过程中出现了IO操作 阻塞态无法直接进入运行态 需要先进入就绪态

标签:addr,UDP,socket,理论,server,msg,CPU,多道
From: https://www.cnblogs.com/super-xz/p/16900974.html

相关文章