IO(input output)

在内存中存在数据交互的操作认为是IO操作

和终端交互:input  print

和磁盘交互:read  write

和网络交互:recv  send

IO密集型程序:在程序执行中有大量的IO操作,有较少的cpu运算,消耗cpu少,效率低,耗时长

计算密集型程序:在程序运行过程中,IO操作较少,cpu计算较多,cpu消耗大,运行速度快

由于IO密集型程序在日常工作中必不可少,但其效率低,耗时长,因此产生了IO模型

IO模型:阻塞IO,非阻塞IO,IO多路复用,时间IO,异步IO等

阻塞IO

是IO的默认形态,效率很低的一种IO。

阻塞情况:因为某种条件没有达成的函数阻塞(accept, input, recv)。处理IO的时间较长产生的阻塞行为(网络延迟,大文件的读写)

非阻塞IO

将原本阻塞的函数通过属性的设置改变阻塞行为,变为非阻塞

sockfd.setblocking(bool)
    功能: 设置套接字为非阻塞IO 
    参数: 默认True 表示套接字调用阻塞函数时为阻塞状态
          设置为False则表示非阻塞状态


    超时检测,即设置一个最长阻塞等待时间,超时后即不再阻塞
     
    sockfd.settimeout(sec)
    功能:设置套接字超时时间
    参数: 设置的时间, 秒

    * 超时检测不能和非阻塞通用,否则超时没有意义

服务器端

from socket import *
from time import sleep,ctime

# tcp套接字
sockfd = socket()
sockfd.bind(('0.0.0.0',8888))
sockfd.listen(3)

# 设置为非阻塞
# sockfd.setblocking(False)
# 设置超时等待
sockfd.settimeout(3)

while True:
    print("Waiting for connect....")
    try:
        connfd,addr = sockfd.accept()
    except BlockingIOError:
        sleep(2)
        print(ctime(2))
        print("无阻塞")
        continue
    except timeout:
        print("超时等待5秒...")
        continue
    else:
        data = connfd.recv(1024).decode()
        print(data)
        connfd.send(b'Receive message')
        break

sockfd.close()

未完.........

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值