加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

IO多路复用

发布时间:2020-12-14 03:47:48 所属栏目:大数据 来源:网络整理
导读:? 一、用非阻塞IO解决阻塞IO模型 import socketsk = socket.socket()sk.bind(( ‘ 127.0.0.1 ‘ ,8080 ))sk.listen()sk.setblocking(False)lst = []del_lst = [] while 1 : try : conn,address = sk.accept() lst.append(conn) except BlockingIOError: for

?

一、用非阻塞IO解决阻塞IO模型

  

import socket
sk = socket.socket()
sk.bind((127.0.0.1,8080))
sk.listen()
sk.setblocking(False)
lst = []
del_lst = []
while 1:
    try:
        conn,address = sk.accept()
        lst.append(conn)
    except BlockingIOError:
        for conn in lst:
            try:
                dat = conn.recv(1024).decode(utf-8)
                if not dat:
                    del_lst.append(conn)
                    print(客户端正常关闭)
                    conn.close()
                else:
                    print(dat)
                    conn.send(dat.upper().encode(utf-8))
            except ConnectionResetError :
                continue
            except BlockingIOError:
                pass
        if del_lst:
            for i in del_lst:
                lst.remove(i)
            del_lst.clear()
sever_非阻塞IO解决IO阻塞

import socket
sk = socket.socket()
sk.connect((127.0.0.1,8080))
while 1:
    word = input(>>>)
    if word == q:
        break
    sk.send(word.encode(utf-8))
    info = sk.recv(1024).decode(utf-8)
    print(info)

sk.close()
client_

二、基于select的IO多路模型

select? 和? poll,epoll

select 和 poll 有一个共同机制:都采用轮询的方式去访问内核,问数据有没有准备好。

select 有一个最大的监听事件的限制,32位机限制是1024,64位机限制是2048。

poll 没有,理论上pool可以开启无限大

epool 采用的是回调机制,解决了select 和 poll 的缺点

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读