并发
并發
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('', 8888)) server.listen(5) # 生成監聽套接字def server_recv(conn):while True:recv_data = conn.recv(1024)if recv_data:print(recv_data.decode())conn.send(recv_data)else:conn.close()breakwhile True:conn, addr = server.accept() # 生成對等套接字# 將阻塞的對等套接字存入線程, recv就會在自己的線程中阻塞,達到并發效果thread = threading.Thread(target=server_recv, args=(conn, ), daemon=True)thread.start()
輪詢調度實現并發
輪詢調度算法的原理是每一次把來自用戶的請求輪流分配給內部中的服務器,從1開始,直到N(內部服務器個數),然后重新開始循環。?
時間片輪轉:(執行完第1個任務,再執行第2個,...)
優先級調度:(有優先順序)
?
多線程實現并發:
線程被稱為輕量級進程(微進程),與進程類似,是在進程下執行的,并且線程之間共享上下文
# -*- coding: utf-8 -*- ''' 多進程實現并發 python GIL保證同時刻只會執行一個線程,如果線程阻塞會切換到下一個線程 ''' import socket import threadingserver = socket.socket()server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('', 8888)) server.listen(5) # 生成監聽套接字def server_recv(conn):while True:recv_data = conn.recv(1024)if recv_data:print(recv_data.decode())conn.send(recv_data)else:conn.close()breakwhile True:conn, addr = server.accept() # 生成對等套接字# 將阻塞的對等套接字存入線程, recv就會在自己的線程中阻塞,達到并發效果thread = threading.Thread(target=server_recv, args=(conn, ), daemon=True)thread.start()
其它操作:進程線程類似
process = multiprocessing.Process(target=fun) process.start() process.current_process() # 查看當前進程 process.join() # 等待子進程process結束后,主進程才會結束(阻塞) 等同線程 process.ternamite() # 父進程結束,子進程強制結束 線程不能被終止?
posted on 2019-03-28 16:46 .Tang 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/tangpg/p/10616084.html
總結
- 上一篇: Linux和Windows平台 动态库.
- 下一篇: Java 学习笔记 反射与迭代器