基於UDP的套接字編程
udp是無鏈接的,先啓動哪一端都不會報錯併發
socket.SOCK_DGRAM 數據報協議socket
udp不會發送空數據,什麼都不輸入直接發送也會有報頭髮過去tcp
服務端spa
import socket server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(('127.0.0.1',8080)) while True: data,client_addr = server.recvfrom(1024) print(data) server.sendto(data.upper(),client_addr) 客戶端 import socket client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True: msg = input('>>:') client.sendto(msg.encode('utf-8'),('127.0.0.1',8080)) data,server_addr = client.recvfrom(1024) print(data)
socketserver模塊
使用socketserver類實現基於tcp的併發編程操作系統
import socketserver class MyHandler(socketserver.BaseRequestHandler): def handle(self): # 通訊循環 while True: try: data = self.request.recv(1024) if len(data) == 0: break self.request.send(data.upper()) except ConnectionRefusedError: break self.request.close() if __name__ == '__main__': s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyHandler, bind_and_activate=True) s.serve_forever() # 表明鏈接循環 # 循環創建鏈接,每創建一個鏈接就會啓動一個線程(服務員),專門與剛剛創建好的鏈接作通訊循環
使用socketserver類實現基於udp的併發編程線程
import socketserver class MyHandler(socketserver.BaseRequestHandler): def handle(self): # 通訊循環 print(self.__dict__) print(self.client_address) print(self.request) data = self.request[0] print('客戶消息', data) self.request[1].sendto(data.upper(), self.client_address) if __name__ == '__main__': s = socketserver.ThreadingUDPServer(('127.0.0.1', 8081), MyHandler) s.serve_forever()
進程code
1.什麼是進程?server
進程指的是一個正在運行的程序,或者說是程序的運行過程,即進程是一個抽象的概念blog
進程是起源於操做系統的,是操做系統最核心的概念,操做系統全部其餘的概念都是圍繞進程展開的
2.爲什麼要進程?
併發
3.如何用進程?
開啓進程的兩種方式
操做系統原理
1.串行:一個任務完完整整地運行完畢後,才能運行下一個任務
2.併發:看起來多個任務是同時運行的便可,單核也能夠實現併發
3.並行:真正意義上多個任務同時運行,只有多核才能實現並行
4.cpu的功能:cpu是用來作計算的,cpu是沒法執行IO操做的,一旦遇到io操做,應該去執行別的任務
5.多道技術:
①空間上的複用==》多個進程共用一個內存條
②時間上的複用==》多個進程複用同一個cpu的時間
cpu遇到IO切換:能夠提高效率
一個進程佔用cpu時間過長也會切走:爲了實現併發效果不得已而爲之,反而會下降程序的執行效率