UDP协议与操作系统的基本知识

1 > UDP协议

  UDP协议是一种面向无连接的socket通信与生活中的邮件投递类似,接收邮件的一方无须一直等待发送邮件的一方发起连接请求;发送邮件的一方只需要知道接收方的收件地址,便可直接投递邮件。UDP协议的通信流程如下图:
在这里插入图片描述

  根据上述图显示的面向无连接的socket通信流程与前一篇讲的面向连接的socket通信流程大致相同,区别在于面向无连接(UDP协议)的通信中,客户端不再发起连接请求,而是使用sendto方法向指定的接收方发送数据;服务器则使用recvfrom()方法接收数据,并可以使用sendto()方法将请求的处理结果反馈到客户端。

1.1 > 简易实现UDP协议代码

										''' server '''
import socket

server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))

msg, addr = server.recvfrom(1024)
print('msg >>>> :', msg.decode('utf8'))
print('addr >>>>:', addr)
server.sendto(b'hello client there is server', addr)

										''' client '''

import socket

client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8080)
client.sendto(b'hey bro there is client', server_addr)
msg, addr = client.recvfrom(1024)
print('msg >>>> :', msg.decode('utf8'))
print('addr >>>>:', addr)


  结果如下图:
在这里插入图片描述
在这里插入图片描述

1.2 > 简易版的聊天室代码

										''' server '''

import socket

server = socket.socket(type=socket.SOCK_DGRAM)
server.bind('127.0.0.1', 8080)
while True:
	msg, addr = server.recvfrom(1024)
	print(f'----来自{addr}的消息----')
	print(msg.decode('utf8'))
	back_msg = input('请输入你想回复的消息 >>>>>:').strip()
	server_sendto(back_msg.encode('utf8'), addr)


										''' client '''
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)
	recv_msg, addr = client.recvfrom(1024)
	print(f'----来自{addr}的消息----')
	print(recv_msg.decode('utf8'))
	

  代码效果如下图:
在这里插入图片描述
在这里插入图片描述

2 > 操作系统的发展史

  第一代:穿孔卡片

  该阶段程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。
  优势:用户独占一台计算机
  劣势:CPU的使用率极低

  第二代:联机批处理系统

  批处理系统的意思就是,加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。
  这样的好处就是一次性可以录入多个用户指令、缩短了cpu等待的时间、提高了CPU的利用率。

  第三代:脱机处理系统

  该阶段就是现代计算机核心部件的雏形、提高CPU的利用率

  所以说操作系统的发展就是为了提升CPU利用率的过程。

3 > 多道技术

  多道技术的目的其实也是为了提升CPU的利用率,降低程序等待的时间

3.1 > 串行

  即多个任务排队执行 总耗时就是多个任务完成时间的叠加,如下图所示:
在这里插入图片描述

3.2 > 多道

  即利用空闲的内存空间提前准备,缩短总的执行时间并且还能提高CPU的利用率,如下图所示:
在这里插入图片描述
  多道技术他的两大类细节

  1. 空间上的复用
   多个任务共用一套计算机硬件。

  2. 时间上的复用
   切换加保存状态,
   cpu在两种情况下会被拿走
    1. 程序遇到IO操作,CPU自动切走运行其他程序
    2. 程序长时间占用CPU 系统发现之后也会强行切走CPU 保证其他程序也可以使用。(CPU为单核的情况)

4 > 进程理论

4.1 > 什么是进程

  程序:就是一堆没有没执行的代码(死物)
  进程:就是真在运行的程序(活的)

4.2 > 为什么有进程的概念

  就是为了更加精确的描述出一些实际状态

4.3 > 进程调度算法发展史

  1. 先来先服务
    对短作业进程不太友好

  2. 短作业优先
     对长作业不太友好,很多的短进程就很难让长作业执行

  3. 时间片轮转法与多级反馈队列
    时间片轮转法: 先公平的将CPU分给每个人执行
    多级反馈队列:根据作业长短的不同再合理分配CPU执行时间

5 > 并发与并行

5.1 > 并发

  即看上去像同时在执行就可以称之为是并发。
  此时的CPU就好比是饭店里的一个服务员,任务呢就好比是饭店中的多卓客人,那想让所有客人都感觉被服务员服务着的感觉,就需要让服务员在多桌客人之间快速的来回切换并保存状态即可。所有说并发其实就是CPU在多个程序之间利用多道技术来回切换 + 保存状态。其中单核肯定能够实现并发,但不能实现并行

5.2 > 并行

  即必须同一时间同时运行任务才可以称之为并行。其中单核肯定不能实现并行,因为并行需要多个CPU才行。

5.3 > 高并发与高并行

  高并发就是我们写的软件可以支持一个亿的并发量, 然后让一个亿的用户来了之后都可以感觉自己被服务着。

  高并行:就是我们写的软件可以支持一个亿的并行量,这句话的言外之意就是计算机有一亿个CPU。

6 > 同步与异步

6.1 > 同步

  即提交完任务之后原地等待任务的返回结果,期间不做任何事情

6.2 > 异步

  即提交完任务之后不愿原地等待任务的结果 直接去做其他的事情,有结果则自动提醒。

7 阻塞与非阻塞

  一个程序的执行是有3个状态,即进程三状态图。


	1.就绪态:程序之进入运行之前肯定要处于就绪态
	2.运行态:程序被CPU执行着
	3.阻塞态:程序执行过程中有IO操作
	''' 
	如果想要尽可能的提升程序执行效率
	就要想办法让我们的程序一直处于就绪态和运行态(不要有IO操作)
	'''
	阻塞:阻塞态
	非阻塞: 就绪态、运行态
	

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

	同步异步:用来描述任务的提交方式
	阻塞与非阻塞:用来描述任务的执行状态

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值