udp协议与进程

一、udp协议

  • QQ聊天室
#- sever
import socket #socket.SOCK_DGRAM--->UPD协议 sever = socket.socket(type=socket.SOCK_DGRAM) #服务端需要绑定一个地址,让别人知道你在哪里
sever.bind(
('127.0.0.1', 9002)
) while True: #发送数据给服务端的用户地址
data, addr = sever.recvfrom(1024) print(addr)
print(data.decode('utf-8')) #- client
import socket client = socket.socket(type=socket.SOCK_DGRAM) address = ('127.0.0.1', 9002) while True: msg = input('client---->sever:').strip().encode('utf-8') client.sendto(msg, address) ('127.0.0.1', 57697)
热巴
('127.0.0.1', 59959)
热巴真美啊
('127.0.0.1', 59960)
热巴亚峰啊

二、理论知识

  • 必备知识
1、udp协议(了解)
称之为数据包协议 特点:
1) 不需要建立链接
2) 不需要知道对方是否收到
3) 数据不安全
4) 传输速度快
5) 能支持并发
6) 不会粘包
7) 无需先启动服务端再启动客户端 优点:
- 传输速度快
- 能支持并发
- 不会粘包 缺点:
- 数据不安全,容易丢失 应用场景:早期的QQ聊天室 - tcp协议(称为流式协议) 优点:
- 数据安全 缺点:
- 传输速度慢
- 粘包 面试可能会问:tcp与udp的区别,简述优缺点即可(*******) 2、并发编程 1)操作系统发展史
- 1.1 穿孔卡片
- 读取数据速度特别慢
- CPU的利用率极低
- 单用户(一份代码使用) ![](https://img2018.cnblogs.com/blog/1843751/201912/1843751-20191206195817239-1051109546.png) - 1.2 批处理
- 读取数据速度特别慢
- CPU的利用率极低
- 联机(多份代码使用)
- 效率还是很低 - 1.3 脱机批处理(现代操作系统的设计原理)
- 读取数据速度高
- CPU的利用率提高 2) 多道技术(基于单核背景下产生的):
- 单道:一条道走到黑 ---> 串行
- 比如:a,b需要使用CPU,a先使用,b等待a使用完毕后才能使用CPU - 多道:(*******)
- 比如:a,b需要使用CPU,a先使用,b等待a,直到a进入“io或执行时间过长”
a会(切换 + 保存),然后b可以使用CPU,待b执行遇到“io或执行时间过长”
再将CPU执行权限交给a,直到两个程序结束 - 空间的复用(*******)
多个程序使用一个CPU - 时间上的复用(*******)
切换 + 保存状态 1)当执行程序遇到io时,操作系统会将CPU的执行权限剥夺。 优点:
- CPU的执行效率提高 2)当执行时间过长时,操作系统会将CPU的执行权限剥夺 缺点:
- 程序的执行效率低
![](https://img2018.cnblogs.com/blog/1843751/201912/1843751-20191206195843026-150840510.png) - 并发与并行;(*******)
- 并发(一个人):
在单核(一个CPU)情况下,当执行两个a,b程序时,a先执行,当a遇到io时,b开始争抢CPU的权限,再让b执行,他们看起来像同时运行。
- 并行(两个或多个人):
在多核(多个CPU)的情况下,当执行两个a,b程序时,a与b同时执行。他们是真正意义上的运行。 面试题:在单核情况下能否实现并行?答:不行 3)进程
1、什么是进程?
进程是一个资源单位 2、进程与程序:
- 程序:一堆代码文件
- 进程:执行代码的过程,称之为进程 3、进程调度(了解)
1)先来先服务调度算法(了解)
- 比如程序:a,b,若a先来,则让a先服务,待a服务完成以后,b再服务。
- 缺点:执行效率低 2)短作业优先调度算法优先(了解)
- 执行时间短,则先调度。
- 缺点:导致执行时间长的程序,需要等待所有短时间的程序执行完毕后,才能执行 现代操作系统的进程调度算法:时间片轮法 + 多级反馈队列(知道) 3)时间片轮法
- 比如同时有10个程序需要执行,操作系统会给你10秒,然后时间片轮法会将10秒分成10等分。 4)多级反馈队列:
1级队列:优先级最高,先执行队列中的程序
2级队列:优先级其次
3级队列:以此类推 4)同步与异步(*******)
同步与异步 指的是 “提交任务的方式”。 同步(相当于串行):
两个a,b程序都需要提交并执行,假如a先提交执行,b必须等a执行完毕后,才能提交任务。 异步(相当于并发):
两个a,b程序都需要提交并执行,假如a先提交并执行,b无需等a执行完毕,就可以直接提交任务。 5)阻塞与非阻塞(*******):
- 阻塞(等待):
- 凡是遇到io都会阻塞
- io:
input()
output()
time.sleep(3)
文件的读写
数据的传输 - 非阻塞(不等待):
- 除了io都是非阻塞(比如:从1+1开始计算到100万) 6)进程的三种状态(*******):
- 就绪态:
-同步与异步
- 运行态:程序的执行时间过长 ---->将程序返回给就绪态
-非阻塞 - 阻塞态:
- 遇到io ![](https://img2018.cnblogs.com/blog/1843751/201912/1843751-20191206195906574-1537643301.png) 面试题:阻塞与同步是一样的吗?非阻塞与异步是一样的吗?
- 同步与异步:提交任务的方式 - 阻塞非阻塞:进程的状态 - 异步与非阻塞:--->CPU的利用率最大化 7)创建进程的两种方式:

三、同步演示

  • 代码
import time

def func():
print('start...')
time.sleep(3)
print('end...') if __name__ == '__main__': #任务一:
func() #任务二:
print('程序结束')
#同步执行:任务一执行完以后才会执行任务二
start...
end...
程序结束
  • 串行
from multiprocessing import Process
import time #方式一:直接调用Process def task(): #任务 #name== 'jason_sb' print(f'start....的子进程')
time.sleep(3)
print(f'end...的子进程') if __name__ == '__main__':
#target = 任务(函数地址)---> 创建一个子进程
#异步提交三个任务
p_obj = Process(target=task) p_obj.start() #告诉操作系统,去创建一个子进程 p_obj.join() #告诉操作系统,等待子进程结束以后,再结束,此时相当于串行 print('正在执行当前主进程') start....的子进程
end...的子进程
正在执行当前主进程
  • 异步提交三个进程
# #异步提交三个任务
# #方式一:直接调用Process
#
# def task(name): #任务 #name== 'jason_sb'
#
# print(f'start....{name}的子进程')
# time.sleep(3)
# print(f'end...{name}的子进程')
#
# if __name__ == '__main__':
# #target = 任务(函数地址)---> 创建一个子进程
# #异步提交三个任务
# p_obj1 = Process(target=task, args=('jason_sb',))
# p_obj2 = Process(target=task, args=('sean_sb',))
# p_obj3 = Process(target=task, args=('tank_sb',))
#
#
# p_obj1.start() #告诉操作系统,去创建一个子进程
# p_obj2.start() #告诉操作系统,去创建一个子进程
# p_obj3.start() #告诉操作系统,去创建一个子进程
#
#
# print('正在执行当前主进程')
#
# # start....jason_sb的子进程
# # start....sean_sb的子进程
# # start....tank_sb的子进程
# # end...jason_sb的子进程
# # end...sean_sb的子进程
# # end...tank_sb的子进程
  • 同步提交三个进程
#同步提交三个
def task(name): #任务 #name== 'jason_sb' print(f'start....{name}的子进程')
time.sleep(3)
print(f'end...{name}的子进程') if __name__ == '__main__':
task(1)
task(2)
task(3) # start....1的子进程
# end...1的子进程
# start....2的子进程
# end...2的子进程
# start....3的子进程
# end...3的子进程
  • 异步提交多个进程
异步执行多个进程
def task(name): #任务 #name== 'jason_sb' print(f'start....{name}的子进程')
time.sleep(3)
print(f'end...{name}的子进程') if __name__ == '__main__': list1 = [] for line in range(10):
p_obj = Process(target=task, args=('jason_sb', )) #target后面接的是要调用的对象,即子进程要执行的任务,而args表示调用对象的位置参数元组
p_obj.start()
list1.append(p_obj) for obj in list1:
obj.join() print('主进程') start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
start....jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
end...jason_sb的子进程
主进程
  • 方式二继承process
#方式二:
from multiprocessing import Process
import time class MyProcess(Process):
def run(self): # 注意:这里必须重写run,并且只能是run而不能是其他函数名
print(f'start...{self.name}的子进程')
time.sleep(3)
print(f'end...{self.name}的子进程') if __name__ == '__main__':
list1 = [] for line in range(10):
obj = MyProcess()
obj.start()
list1.append(obj) for obj in list1:
obj.join() print('主进程...') # start...MyProcess-1的子进程
# start...MyProcess-2的子进程
# start...MyProcess-4的子进程
# start...MyProcess-5的子进程
# start...MyProcess-3的子进程
# start...MyProcess-6的子进程
# start...MyProcess-8的子进程
# start...MyProcess-7的子进程
# start...MyProcess-9的子进程
# start...MyProcess-10的子进程
# end...MyProcess-1的子进程
# end...MyProcess-2的子进程
# end...MyProcess-4的子进程
# end...MyProcess-5的子进程
# end...MyProcess-3的子进程
# end...MyProcess-6的子进程
# end...MyProcess-7的子进程end...MyProcess-8的子进程
# end...MyProcess-9的子进程
# end...MyProcess-10的子进程
# 主进程...

udp协议,进程(同步,异步)的更多相关文章

  1. 基于C#的UDP协议的同步实现

    一.摘要 总结基于C#的UDP协议的同步通信. 二.实验平台 Visual Studio 2010 三.实验原理 UDP传输协议同TCP传输协议的区别可查阅相关文档,此处不再赘述. 四.实例  4.1 ...

  2. day33 网络编程之UDP与进程了解

    UDP 什么是UDP协议 在上节课的练习中,使用TCP进行网络编程时,我们会遇到粘包问题,这是因为TCP是流式协议,而今天学习的UDP协议不是流式协议,其发送的数据是数据报格式的,在进行数据发送时该协 ...

  3. UDP协议,多道技术,进程,同步与异步,阻塞与非阻塞

    UDP协议 简介 UDP叫做用户数据报协议,是OSI七层参考模型中传输层使用的协议,他提供的是不可靠传输,既它在传输过程 中不保证数据的完整性! 端口号 UDP使用IP地址和端口号进行标识,以此将数据 ...

  4. UDP协议、操作系统、同步与异步、阻塞与非阻塞

    UDP协议 # 客户端 import socket server = socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8 ...

  5. {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll

    Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...

  6. 基于C#的UDP协议的异步实现

    一.摘要 总结UDP传输协议的异步实现. 二.实验平台 visual studio 2010 三.实验实例 服务器端代码: using System; using System.Collections ...

  7. 进程&线程 同步异步&阻塞非阻塞

    2015-08-19 15:23:38 周三 线程 线程安全 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对 ...

  8. python 并发编程 操作系统 进程 并发.并行 及 同步/异步,阻塞/非阻塞

    操作系统: 多道技术背景: 提高工作效率(充分利用IO阻塞的时间) 同时执行多个任务 多道技术 空间复用:充分的利用内存空间 时间复用:充分利用IO阻塞时间 分时系统: 并发:提高了程序的工作效率 两 ...

  9. Python之路(第三十六篇)并发编程:进程、同步异步、阻塞非阻塞

    一.理论基础 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的. 即使可以利用的cpu只有一个(早期的 ...

随机推荐

  1. mysql分表之水平分割

    一.背景 老大安排要对某张大容量表进行分割,根据年份分割成多张表. 二.水平分割 水平拆分是指数据表行的拆分,表的行数超过百万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放. 定义规则分表后 ...

  2. JavaScript数组循环

    JavaScript数组循环 一.前言 利用Javascript map(),reduce()和filter()数组方法可以遍历数组.而不是积累起来for循环和嵌套来处理列表和集合中的数据,利用这些方 ...

  3. 理解OAuth2

    目录 理解OAuth2 Oatuh2用来做什么 Oauth2具体做法 Oauth2的流程 授权码模式 第三方引导用户跳转至认证服务器的授权页面 用户选择是否给予授权 认证服务器生成code并且让用户重 ...

  4. 使用PXE+DHCP+TFTP+kickstart搭建无人执守系统安装服务器

    原理和概念:  1. 什么是PXE  严格来说,PXE 并不是一种安装方式,而是一种引导的方式.进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 ...

  5. oc:定时删除ES日志数据释放空间

    修改方法: 1.直接编辑修改 查看当前logging-curator配置,了解当前定时删除大的策略. oc edit configmap/logging-curator 打开后,可以直接编辑保存. 2 ...

  6. 【译】ModSecurity

    Preface 本篇译ModSecurity 主页的自身介绍. ModSecurity is an open source, cross-platform web application firewa ...

  7. Spring中常见的设计模式——委派模式

    一.委派模式的定义及应用场景 委派模式(Delegate Pattern)的基本作用是负责任务的调用和分配,跟代理模式很像,可以看做特殊情况下的静态的全权代理,但是代理模式注重过程,而委派模式注重结果 ...

  8. 带你自行搭建虚拟机和Redis集群环境,值得收藏!

    前言: 我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 redis 集群环境的介绍,并不是很多或者说还不够详细. 那么,本文会手把手带着大家搭建一套 Redis 集群环境,Re ...

  9. mysql常用运行原理

    MySQL的客户端/服务器架构 MySQL的服务器程序直接和我们存储的数据打交道,然后可以有好多客户端程序连接到这个服务器程序,发送增删改查的请求,然后服务器就响应这些请求,从而操作它维护的数据.和微 ...

  10. Docker Compose部署Nexus3时的docker-compose,yml代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...