首页 > 其他 > 详细

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

时间:2019-12-28 13:13:07      阅读:163      评论:0      收藏:0      [点我收藏+]

一。四种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 socket
import time
sk=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/28
import socket
sk=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 socket
import select
sk1=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/28
import socket
sk=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‘))

技术分享图片

技术分享图片


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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!