进程简介

100 阅读4分钟

UDP协议

# 服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
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)
# 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
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)

补充说明:
'''
1.服务端不需要考虑客户端是否退出,可以一直处于运行状态
2.UDP不存在黏包问题(UDP多用于短消息的交互)
'''

操作系统的发展史

'''
计算机三大核心硬件:
    CPU:是计算机中真正干活的人
    内存:给CPU准备需要运行的代码
    硬盘:永久存储可能要被执行的代码
强调:CPU是整个计算机执行效率的核心	
'''

1.穿孔卡片
    cpu利用率十分的低
    好处是程序员可以一个人独占计算机
2.联机批处理系统
    缩短录入数据的时间,让cpu连续工作的时间边长>>>:提升cpu的利用率
3.脱机批处理系统
    是现代计算机的雏形>>>:提升CPU的利用率
总结:
    操作系统的发展史可以看做是CPU利用率提升的发展史

多道技术

我们现在研究的多道技术基于一个前提:只有一个CPU

单道技术:所有的程序排队机执行 总耗时是所有程序单次运行耗时之和
多道技术:计算机利用闲暇时间准备好一切数据,提高效率,总耗时短

多道技术原理:
1.切换状态:(出现以下情况,自动切换去执行其他程序)
    程序自身进入IO操作
    程序长时间占用CPU
    IO操作:输入输出操作、time.sleep()、读取保存文件
2.保存状态
    每次切换之前要记录下当前执行的状态 之后切回来基于当前状态继续执行
eg: 
做饭耗时50min
洗衣耗时30min
烧水耗时10min
    单道技术:50+30+10
    多道技术:50(做饭时去洗衣和烧水)

进程理论

1.如何理解进程
    程序:一堆躺在文件上的'死代码'
    进程:正在运行的程序
2.进程的调度算法
    2.1 先来先服务
    针对耗时较短的程序不友好
    2.2 短作业优先调度    
            针对长作业不太友好
    2.3 时间片轮转发 + 多级反馈队列
            将固定的时间分成很多分,所有程序来了都公平的分一份
            分配多次之后如果还有程序没运行完,则将其分到下一层
            越往下表示程序总耗时越长,每次分配的时间片越多,但是优先级越低。        

进程的并行与并发

1.并行
    多个进程同时执行
    必须要有多个CPU:几个进程就要分配几个CPU	
2.并发
    多个进程看上去像同时执行就可以称之为并发
    单个CPU完全可以实现并发的效果(如果是并行那么也属于并发)

一般说高并发,而不说高并行    

进程的三种状态

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

6.jpg

同步和异步

用于描述任务的提交状态
同步
    提交完任务后原地等待任务结果,期间不做任何事
异步
    提交完任务后可以去做其他事,任务完成后结果自动提醒

阻塞与非阻塞

用于描述进程的执行状态
阻塞:阻塞态
非阻塞:就绪态或运行态

同步异步与阻塞非阻塞

我么用银行排队的例子来描述
同步阻塞:在银行排队,并且排队期间什么也不干
同步非阻塞:在银行排队,期间可以玩手机
异步阻塞:在旁边的座位上等着叫号,期间不做事
异步非阻塞:在旁边座位上等着叫号,期间为所欲为