zoukankan      html  css  js  c++  java
  • python实现高并发

    理论方法

    基于IO多路复用,windows中使用select实现,linux中使用select,pool,epoll实现。

    windows中使用select,最多能监听1024个文件句柄,使用轮询检测;

    Linux中使用select最多能监听1024个文件句柄,使用轮询检测;pool,监听个数不限制;epoll使用边缘触发,回调通知

    IO多路复用-扩展知识

    官方定义:帮助开发者监听多个IO句柄发生变化,用于帮助我们监听多个socket是否发生变化(连接服务器的socket,和发送消息的socket)

    为什么使用IO多路复用:在单线程中,由于我们使用服务端与多个客户端收发消息时,由于python的代码是由上往下执行的,因此当服务端和第一个客户端收发消息时,服务端会处于accept这个状态,这样会造成等待,第二个客户端肯定不能和服务端进行交互,为了解决这个问题,引出了IO多路复用。

    代码实现

    import socket
    import select
    #可以连接很多个用户
    sk1=socket.socket()
    sk2=socket.socket()
    sk1.bind(('127.0.0.1',8001))
    sk2.bind(('127.0.0.1',8002))
    
    while True:
        rlist,w,e=select,select([sk1,conn1,conn2],[],5)
        for sk in rlist:
            if sk==sk1:
                # 服务端socket发生变化,新用户来连接
                conn,addr=sk.accept()
                conn.send('hello')
                
            else:
                # 客户端socket发生变化,老用户发来了消息
                data=sk.recv()
                
  • 相关阅读:
    类加载器
    类加载器
    类加载器
    类加载器
    Java11新特性
    Java11新特性
    Spring Cloud Alibaba学习笔记(24)
    Java11新特性
    PyCharm Professional 2016.1 破解 激活
    pycharm最新激活码 2018 2.28 到期
  • 原文地址:https://www.cnblogs.com/djfboai/p/10909463.html
Copyright © 2011-2022 走看看