并发编程1

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了并发编程1脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

内容概要


  • UDP协议
  • UDP协议实战(基于UDP实简易版本的QQ聊天)
  • 操作系统的发展
  • 多道技
  • 进程理论
  • 重要概念01
  • 重要概念02
  • 同步异步与阻塞非阻塞结合

内容详情


UDP协议

服务端
import socket
server = socket.socket(tyPE=socket.SOCK_DGRam)  # 自己指定UDP协议(默认是TCP协议)
server.bind(('127.0.0.1', 8080))
msg, addr = server.recvFrom(1024)
PRint('msg>>>:', msg.decode('utf8'))
print('addr>>>:', addr)
server.sendto(b'hello baby', addr)

客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8080)  # 查找通讯录
client.sendto(b'hello server baby', server_addr)
msg, addr = client.recvfrom(1024)
print('msg>>>:', msg.decode('utf8'))
print('addr>>>:', addr)

UDP协议实战

服务端
import socket

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

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

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)
客户端2
import socket

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

while True:
    msg = input('请输入想要聊天的内容>>>:').strip()
    msg = '来自客户端2的消息:%s' % msg
    client.sendto(msg.encode('utf8'), server_addr)
    msg, addr = client.recvfrom(1024)
    print(msg.decode('utf8'), addr)

并发编程1

操作系统的发展史

"""
学习并发编程其实就是在学习操作系统 理论居多 实战很少 都是封装的代码
"""
1.穿孔卡片
  优势:一个人独占脑
  劣势:CPU利用率极低

2.联机批处理系统
  一次性可以录入多个用户指令、缩短了CPU等待的时间、提高了CPU的利用率
  
3.脱机批处理系统
  是现代计算机核心部件的雏形、提高CPU的利用率

# 总结:操作系统的发展史其实就是提升CPU利用率的过程
  • 脱机批处理系统

并发编程1

多道技术

# 目的:提升CPU利用率 降低程序等待时间
'''强调:目前我们研究并发都是以计算机是单核的情况下:只有一个CPU'''
串行
    多个任务排队执行 总耗时就是多个任务完整时间叠加
多道
    利用空闲提前准备 缩短总的执行时间并且还能提高CPU利用率

"""
多道技术
1.空间上的复用
  多个任务共用一套计算机硬件
2.时间上的复用
  切换+保存状态
      CPU在两种情况下会被拿走
	  1.程序遇到IO操作 CPU自动切走运行其他程序
	  2.程序长时间占用CPU 系统发现之后也会强行切走CPU 保证其他程序也可以使用
"""

并发编程1

进程理论

# 什么是程序、什么是进程
  程序:一堆没有被执行的代码(死的)
  进程:正在运行的程序(活的)
    
# 为什么有进程的概念
  就是为了更加精确的描述出一些实际状态

# 进程调度算法发展史
  1.先来先服务
    对短作业任务不太友好
  2.短作业优先
    多长作业任务不太友好
  3.时间片轮转法与多级反馈队列
    时间片轮转法:先公平的将CPU分给每个人执行
    多级反馈队列:根据作业长短的不同再合理分配CPU执行时间
  '''目的就是为了能够让单核的计算机也能够做到运行多个程序'''

并发编程1

重要概念01

# 并发与并行
  并发
  看上去像同时在执行就可以称之为是并发
  """
  饭店里面有多桌客人(任务) 
  但是只有一个服务员(CPU) 
  如何让所有客人都感觉被服务员服务着(CPU执行)
      让服务员在多桌客人之间快速的来回切换并保存状态即可
      让CPU在多个程序之间利用多道技术来回切换+保存状态
	
   单核肯定能够实现并发 但是不能实现并行!!!
   """
   并行
   必须同一时间同时运行才可以称之为并行
   """单核计算机肯定不能实现并行!!! 必须要有多个CPU"""
    
# 高并发与高并行
  高并发:我们写的软件可以支持1个亿的并发量
    	一个亿的用户来了之后都可以感觉到自己被服务着
  高并行:我们写的软件可以支持1个亿的并行量
    	上述话语的言外之意是计算机有一亿个CPU

重要概念02

# 同步与异步
  同步
      提交完任务之后原地等待任务的返回结果 期间不做任何事情
  异步
      提交完任务之后不愿地等待任务的结果 直接去做其他事情 有结果自动提醒
 
# 阻塞与非阻塞
  进程三状态图
    就绪态:程序之进入运行态之前肯定要处于就绪态
    运行态:程序被CPU执行着
    阻塞态:程序执行过程中有IO操作
    '''
    如果想要尽可能的提升程序执行效率 
    就要想办法让我们的程序一直处于就绪态和运行态(不要有IO操作)
    '''
  阻塞:阻塞态
  非阻塞:就绪态、运行态
  ps:以后不需要考虑是哪个状态 知识今天深入学习一下

并发编程1

同步异步与阻塞非阻塞结合

同步异步:用来描述任务的提交方式
阻塞非阻塞:用来描述任务的执行状态
# 上述两组属于两个不同概念 但是可以结合
  同步阻塞:银行排队办理业务 期间不做任何事
  同步非阻塞:银行排队办理业务 期间喝水东西 但是人还在队列中
  异步阻塞:在椅子上坐着 但是不做任何事
  异步非阻塞:在椅子上坐着 期间喝水吃东西办公  (程序运行的极致)				

脚本宝典总结

以上是脚本宝典为你收集整理的并发编程1全部内容,希望文章能够帮你解决并发编程1所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。