IO并发

本文探讨了IO并发的两种主要形态:阻塞IO和非阻塞IO。阻塞IO在执行条件不满足时会暂停,效率较低但逻辑简单;非阻塞IO则通过设置属性避免阻塞,可以设置超时时间来控制等待行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO并发

IO 分类

IO分类:阻塞IO ,非阻塞IO,IO多路复用,异步IO等

阻塞IO

1.定义:在执行IO操作时如果执行条件不满足则阻塞。阻塞IO是IO的默认形态。
2.效率:阻塞IO是效率很低的一种IO。但是由于逻辑简单所以是默认IO行为。
3.阻塞情况:
因为某种执行条件没有满足造成的函数阻塞
e.g. accept input recv
处理IO的时间较长产生的阻塞状态
e.g. 网络传输,大文件读写

非阻塞IO

代码实现 : day9/block_io

  1. 定义 :通过修改IO属性行为,使原本阻塞的IO变为非阻塞的状态。
    设置套接字为非阻塞IO
    sockfd.setblocking(bool)
    功能:设置套接字为非阻塞IO
    参数:默认为True,表示套接字IO阻塞;设置为False则套接字IO变为非阻塞

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

"""
非阻塞IO演示
"""
from socket import *
from time import ctime,sleep

# 日志文件
f = open('run.log','a+')

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

# 设置非阻塞
# sockfd.setblocking(False)

# 设置超时时间
sockfd.settimeout(2)

while True:
    sleep(3)
    print("Waiting for connect...")
    try:
        c,addr = sockfd.accept()
    except (BlockingIOError,timeout) as e:
        msg = "%s : %s\n"%(ctime(),e)
        f.write(msg)
        f.flush()
    else:
        data = c.recv(1024)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值