轮询调度实现并发
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。
时间片轮转:(执行完第1个任务,再执行第2个,...)
优先级调度:(有优先顺序)
多线程实现并发:
线程被称为轻量级进程(微进程),与进程类似,是在进程下执行的,并且线程之间共享上下文
# -*- coding: utf-8 -*- ''' 多进程实现并发 python GIL保证同时刻只会执行一个线程,如果线程阻塞会切换到下一个线程 ''' import socket import threading server = 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() break while 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() # 父进程结束,子进程强制结束 线程不能被终止