并发编程

并发编程

1.UDP协议

# 服务端代码
import socket

server = socket.socket(type=socket.SOCK_DGRAM)  # 自己指定UDP协议(默认是TCP)
server.bind(('127.0.0.1', 8888))

sock,addr = server.recvfrom(1024)
print('sock>>>:',sock.decode('utf8'))
print('addr>>>:',addr)
server.sendto(b'hello sweet abay',addr)

# 客户端代码
import socket

client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = (('127.0.0.1', 8888))  # 查找通讯录
client.sendto(b'hello no no no',server_addr)
sock,addr = client.recvfrom(1024)
print('sock>>>:',sock.decode('utf8'))
print('addr>>>:',addr)

2.基于UDP协议实现简易的聊天室

# 服务端代码
import socket

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

while True:
    sock,addr = server.recvfrom(1024)
    print(addr)
    print(sock.decode('utf8'))
    back_sock = input('你想回复什么消息>>>:').strip()
    server.sendto(back_sock.encode('utf8'),addr)
    
# 客户端1代码
import socket

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

while True:
    msg = input('请输入信息>>>:').strip()
    sock = '来自客户端1的消息:%s'% msg
    client.sendto(sock.encode('utf8'),server_addr)
    flg,addr = client.recvfrom(1024)
    print(flg.decode('utf8'),addr)

# 客户端2代码
import socket

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

while True:
    msg = input('请输入信息>>>:').strip()
    sock = '来自客户端2的消息:%s'% msg
    client.sendto(sock.encode('utf8'),server_addr)
    flg,addr = client.recvfrom(1024)
    print(flg.decode('utf8'),addr)
    
# 客户端3代码
import socket

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

while True:
    msg = input('请输入信息>>>:').strip()
    sock = '来自客户端3的消息:%s'% msg
    client.sendto(sock.encode('utf8'),server_addr)
    flg,addr = client.recvfrom(1024)
    print(flg.decode('utf8'),addr)

3.操作系统发展史

1.穿孔卡片时代
	优势:一个人可以独占一台计算机
     劣势:CPU利用率极低
2.联机批次处理系统
	一次性可以录入多个用户指令,缩短了CPU等待的时间,提高了CPU的利用率
3.脱机批次处理系统
	是现代计算机核心部件的雏形,提高了CPU的利用率
'''操作系统的发展史其实就是提升CPU利用率的过程'''

4.多道技术

	多道技术就是为了提升CPU的利用率,降低程序的等待时间而发明的,目前我们研究并发都是以计算机是单核的情况
下,意思就是只有一个CPU。
	1.串行:多个任务排队执行,总耗时就是多个任务完整时间叠加
	2.多道:利用空闲提前准备,缩短总的执行时间并提高CPU的利用率 
'''
多道技术分为两种:
	1.空间上的复用:多个任务公用一套计算机硬件
	2.时间上的复用:切换+保存状态,意思就是当CPU运行一个任务的时候,想要切换到另一个任务,就会保存当前任务
的状态。CPU会在两种情况下会被切换,第一种就是当程序遇到IO操作的时候,CPU会自动切走运行其他程序,第二种情况就是
当程序长时间占用CPU的时候,系统发现之后会强行切走CPU,保证其他程序可以正常使用。
'''

5.进程理论

# 1.什么是程序、什么是进程
	程序:一堆没有被执行的代码
    进程:正在运行的程序
# 2.进程的概念
	就是为了更加精确的描述出一些实际的状态
# 3.进程调度算法发展史
	1.先来先服务:对时间短的一些任务不太友好
	2.短作业优先:对长时间的任务不太友好
	3.时间片轮转法与多级反馈队列:时间片轮转法就是先公平的将CPU分给每个人执行,然后多级反馈队列根据作业长短
的不同再合理分配CPU的执行时间。
'''调度算法的目的就是为了能够让单核的计算机也能够做到运行多个程序'''

6.并发与并行

# 并发与并行
1.并发:看上去像同时在执行就可以称之为并发。
2.并行:必须同一时间同时运行才可以称之为并行。
'''单核计算机肯定可以实现并发,但是不能实现并行,实现并行必须要有多个CPU'''
# 高并发与高并行
	高并发就是比如说一款软件或者一个程序支持很高的并发量,意思就是当很多用户都来使用这款软件或者程序的时
候,都可以正常使用,高并行用上面的例子呢,意思就是说一台计算机上有大量的CPU。

7.同步、异步与阻塞、非阻塞

# 同步、异步
'同步、异步是用来描述任务的提交方式的'
	同步:提交完任务之后原地等待任务的返回结果期间不作任何的事情。
	异步:提交完任务之后不在原地等待任务的结果,直接去做其他事情,有结果的话会自动提醒。
# 阻塞、非阻塞
'阻塞、非阻塞是用来描述任务的执行状态的'
	阻塞:就是阻塞态
	非阻塞:就是运行态或者就绪态
我们可以看一下进程三状态图,'就绪态'就是程序进入运行态之前肯定要处与就绪态,然后进入'运行态',程序被CPU运行
着,'阻塞态'就是程序执行过程中有IO操作。
'''如果我们想要尽可能的提升程序执行的效率,就要想办法让程序一直处于就绪态或者运行态,意思就是不要有IO操作'''
# 同步、异步与阻塞、非阻塞结合
1.同步阻塞:就相当于排队做核酸,排队的期间不能做任何事情
2.同步非阻塞:就相当于排队做核酸,排队的期间可以玩玩手机、刷刷视频做一些事情
3.异步阻塞:做完核算了就在那里等待结果,什么事情也不干
4.异步非阻塞:做完核酸,回家做饭看电视等待核算结果出来

这里是IT小白陆禄绯,欢迎各位大佬的指点!!!

posted @ 2022-04-18 20:12  陆禄绯  阅读(42)  评论(0)    收藏  举报