39章 并发章节-同步异步/阻塞/非阻塞

章节

UDP协议

  • udp实战模拟【服务端和客户端通信】

  • 服务端代码
import socket
server = socket.socket(type=socket.SOCK_DGRAM)    #指定udp协议
server.bind(('127.0.0.1', 8080))
msg, address = server.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
server.sendto('我是服务端 你好啊'.encode('utf8'), address)

--------服务端执行结果------------
msg>>>:我是服务端,你好啊
address>>>: ('127.0.0.1', 8080)
  • 客户端代码
import socket
client = socket.socket(type=socket.SOCK_DGRAM)	#指定udp协议
server_address = ('127.0.0.1', 8080)
client.sendto('我是客户端 想我了没'.encode('utf8'), server_address)
msg, address = client.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)

----------------客户端收到结果----------
msg>>>:我是服务端,你好啊                   
address>>>: ('127.0.0.1', 8080)

操作系统的发展史

三大核心硬件

cpu:整个计算机执行效率的核心

内存:给cpu准备需要运行的代码

硬盘:永久存储将来可能需要被运行的代码


  • 发展历史

  • 1.穿孔卡片

    cpu 利用率非常的低
    好处是程序员可以一个人独占计算机,想干嘛,干嘛
    
  • 2.联机批处理系统

    缩短录入数据的时候,让cpu连续工作时间边长>>提升cpu利用率
    
  • 3.脱机批处理系统

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

    总结:操作系统的发展史可以堪称cpu利用率提升的发展史

多道技术

  • 单道技术

    所有的程序排队执行,总耗时是所有程序耗时之和
    
  • 多道技术

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

    特点:

    切换+保存状态
    ------------------------------------------
    #切换
    1.cpu在以下两种情况(去执行其它程序)
    	1.程序自身进入IO操作
    	  IO操作:输入输出操作
    	  time.sleep()
    	  读取文件
    	  保存文件
    	2.程序长时间占用cpu
    ---------------------------------------------
    2保存状态
    每次切换都之前都要记录下当前执行状态,之后切回来基于当前状态继续执行
    

进程理论

  • 进程定义

程序:一堆代码
进程:正在被运行的程序(活的)

注意:同一个程序执行两次,就会在操作系统中出现两个进程,所以我们可以同时运行一个软件,分别做不同的事情也不会混乱。
  • 进程的调度算法

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

进程的并行与并发

  • 什么是并行

多个进程同时执行
单个cpu肯定无法实现并行,必须有多个cpu
  • 什么是并发

多个进程看上去像相同执行的就可以称之为并发 
单个cpu完全可以实现并发效果,并行也属于并发

----高并发网站-----
12306

进程的三种状态

1659946856439

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

同步与异步(重要)

用于描述任务的提交状态

  • 同步

    提交完任务之后原地等待任务的结果 期间不做任何事
    
  • 异步

    提交完任务之后不原地等待直接去做其他事 结果自动提醒
    

阻塞与非阻塞

​ 用于描述进程的执行状态

  • 阻塞

    在调用结果返回前,当前线程会被挂起,一直得到结果之后返回
    
  • 非阻塞

    如果不能立刻得到结果,则该调用者不会阻塞当前线程,程序会定期轮询处理查看当前状态,有结果才会返回
    
  • 同步阻塞

    在提交任务后,一直在等待返回结果通知,阻塞是提交和返回的过程中,不能做其它处理操作。
    
  • 同步非阻塞

    提交任务后,同步体一直等待返回结果通知,非阻塞会对进行其它处理操作;不过会定期轮询查看同步体的返回结果状态
    
  • 异步阻塞

    提交任务后,不用原地等待返回结果,阻塞体在等待过程中,不做其它操作。
    
  • 异步非阻塞

    提交任务后,异步去做其他事情,等待返回结果通知,非阻塞如果不能立刻得到结果,会进行其它操作。一直等到返回结果
    
posted @ 2022-08-08 16:41  名字长的像一只老山羊  阅读(23)  评论(0编辑  收藏  举报