并发编程
概念:
并发:程序看上去是在同时运行
串行:一个程序完完整整的运行完毕,才能运行下一个程序
作用:
cpu在执行程序,遇到io时,不干活,就可以使用并发
多道技术:
- 空间上的复用(多个程序共一套硬件设备,它是多道技术实现时间上的复用的基础,
不然还要去硬盘读数据)
- 时间上的复用(单个cpu的电脑上,起多个应用程序。cpu快速切换,给人的感觉是同时运行)
cpu两种情况下才会切换:(先保存当前程序的运行状态)
- 一个任务占用cpu时间过长或被操作系统强行剥夺走cpu的执行权限(比起串行效率反而降低)
- 一个任务执行过程中遇到io操作,也会被操作系统强行剥夺走cpu的执行权限(比起串行效率提高)
用法:
示例:
# TCP socketserver使用 import socketserver class MyTcpServer(socketserver.BaseRequestHandler): def handle(self): while True: try: data = self.request.recv(1024) # 对于tcp,self.request相当于conn对象 if len(data) == 0:break print(data) self.request.send(data.upper()) except ConnectionResetError: break if __name__ == '__main__': server = socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyTcpServer) server.serve_forever() # UDP socketserver使用 import socketserver class MyUdpServer(socketserver.BaseRequestHandler): def handle(self): while True: data, sock = self.request print(data) sock.sendto(data.upper(), self.client_address) if __name__ == '__main__': server = socketserver.ThreadingUDPServer(('127.0.0.1', 8080), MyUdpServer) server.serve_forever()