码迷,mamicode.com
首页 > 其他好文 > 详细

IO多路复用

时间:2018-08-29 01:14:36      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:alt   select   限制   复用   epoll   64位   not   send   ror   

 

一、用非阻塞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 的缺点

 

IO多路复用

标签:alt   select   限制   复用   epoll   64位   not   send   ror   

原文地址:https://www.cnblogs.com/wf123/p/9551544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!