非阻塞io模型和io多路复用----select

一。四种io阻塞
1.io阻塞:
(1 等待数据处于阻塞状态
(2从内核copy到用户态处于阻塞状态
2.非io阻塞
只有从内核copy到用户态处于阻塞状态
3.io多路复用-----》优势:可以同时监听多个对象
(1从check-----》ready 通过selec函数来做,处于阻塞状态
(2从内核copy到用户态处于阻塞状态
3.异步io
不用阻塞
二。io多路复用
select  poll epoll 都属于io同步里面的io多路复用
select:轮询问题,监听数量有限
poll:提高了监听数量
epoll:解决了轮询问题

======================================================================================

服务器端1

#_author:来童星#date:2019/12/28#非阻塞io模型import socketimport timesk=socket.socket()address=(‘127.0.0.1‘,8080)sk.bind(address)sk.listen(3)sk.setblocking(False)#将阻塞变为非阻塞while 1:    try:        coon,addr=sk.accept()        print(addr)        #while 1:        data=coon.recv(1024)        print(data.decode(‘utf8‘))        coon.close()        #coon.sendall(data.upper())    except Exception as e:        print(‘Error:‘,e)        time.sleep(3)客户端1
#_author:来童星#date:2019/12/28import socketsk=socket.socket()address=(‘127.0.0.1‘,8080)sk.connect(address)while 1:

    #inp=input(‘>>‘)    sk.sendall(‘hello server‘.encode(‘utf8‘))    data=sk.recv(1024)    print(data.decode(‘utf8‘))    #ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。

=============================================================================select server端
#_author:来童星#date:2019/12/28#io多路复用----》水平触发,边缘触发#select用的是水平触发import socketimport selectsk1=socket.socket()address1=(‘127.0.0.1‘,8080)sk1.bind(address1)sk1.listen(3)

sk2=socket.socket()address2=(‘127.0.0.1‘,8081)sk2.bind(address2)sk2.listen(3)r,w,e=select.select([sk1,sk2],[],[])print(‘rrr‘)for obj in r:    coon,addr=obj.accept()    print(addr)    coon.sendall(‘hello client‘.encode(‘utf8‘))    #coon--->client端信息    #r------》sk对象select client端:
#_author:来童星#date:2019/12/28import socketsk=socket.socket()address=(‘127.0.0.1‘,8080)sk.connect(address)while 1:    data=sk.recv(1024)    print(data.decode(‘utf8‘))    inp = input(‘>>‘)    sk.sendall(inp.encode(‘utf8‘))

==================================================================

原文地址:https://www.cnblogs.com/startl/p/12111279.html

时间: 2024-11-07 21:33:52

非阻塞io模型和io多路复用----select的相关文章

异步IO模型和Overlapped结构

.NET中的 Overlapped 类 异步IO模型和Overlapped结构(http://blog.itpub.net/25897606/viewspace-705867/) 数据结构 OVERLAPPED结构主要用于异步I/O操作,其数据结构定义如下: typedef struct _OVERLAPPED {     DWORD Internal;     // 系统保留,存放系统设置的状态     DWORD InternalHigh; // 系统保留,存放被传输数据的长度     DW

阻塞、非阻塞、异步、同步以及select/poll和epoll

针对IO,总是涉及到阻塞.非阻塞.异步.同步以及select/poll和epoll的一些描述,那么这些东西到底是什么,有什么差异? 一般来讲一个IO分为两个阶段: 等待数据到达 把数据从内核空间拷贝到用户空间 现在假设一个进程/线程A,试图进行一次IO操作. A发出IO请求,两种情况: 1)立即返回 2)由于数据未准备好,需要等待,让出CPU给别的线程,自己sleep 第一种情况就是非阻塞,A为了知道数据是否准备好,需要不停的询问,而在轮询的空歇期,理论上是可以干点别的活,例如喝喝茶.泡个妞.

非阻塞socket调用connect, epoll和select检查连接情况示例

from http://www.cnblogs.com/yuxingfirst/archive/2013/03/08/2950281.html 我们知道,linux下socket编程有常见的几个系统调用: 对于服务器来说, 有socket(), bind(),listen(), accept(),read(),write() 对于客户端来说,有socket(),connect() 这里主要要讲的是客户端这边的connect函数. 对于客户端来说,需要打开一个套接字,然后与对端服务器连接,例如:

python开发IO模型:阻塞&非阻塞&异步IO&多路复用&selectors

一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西.这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同.所以,

五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O

五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O 五种I/O 模式:[1]        阻塞 I/O           (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)[2]        非阻塞 I/O        (可以通过fcntl或者open时使用O_NONBLOCK参数,将fd设置为非阻塞的I/O)[3]        I/O 多路复用     (I/O

并发编程 - IO模型 - 1.io模型/2.阻塞io/3.非阻塞io/4.多路复用io

1.io模型提交任务得方式: 同步:提交完任务,等结果,执行下一个任务 异步:提交完,接着执行,异步 + 回调 异步不等结果,提交完任务,任务执行完后,会自动触发回调函数同步不等于阻塞: 阻塞:遇到io,自己不处理,os会抢走cpu ,解决办法:监测到io,gevent切换到其他任务,类似欺骗os 非阻塞:cpu 运行 IO分类: 1.阻塞IO blocking IO 2.非阻塞IO nonblocking IO 3.IO多路复用 IO multiplexing 4.信号驱动IO signal

IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO

IO模型介绍: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO () * asynchronous IO 异步IO IO模型介绍: 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,

{python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块

阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchronous I/O) 六 IO模型比较分析 七 selectors模块 一 IO模型介绍 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能

阻塞IO、非阻塞IO、IO多路复用、同步IO、异步IO 的理论

同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西.这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同.所以,为了更好的回答这个问题,我先限定一下本文的上下文.本文讨论的背景是Linux环境下的ne