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

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

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

标签:dal   author   decode   ddr   轮询   io阻塞   ted   建立   服务器端   

一。四种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

标签:dal   author   decode   ddr   轮询   io阻塞   ted   建立   服务器端   

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

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