阻塞/非阻塞IO、同步/异步IO的区别

阻塞/非阻塞IO、同步/异步IO的区别

 阻塞/非阻塞IO和同步/异步IO是描述IO操作(输入/输出操作)的两种不同方式,它们在处理IO操作时具有不同的特性和应用场景。

阻塞/非阻塞IO

阻塞IO和非阻塞IO主要关注的是程序在等待IO操作完成时的行为。

阻塞IO:在进行IO操作时,如果数据没有就绪,则进程会进入睡眠状态,CPU不再给它分配时间片,直到数据准备好为止。在阻塞IO模型中,IO操作在数据准备好之前是不会被返回的。也就是说,在调用阻塞IO函数时,函数会阻塞当前线程直到操作完成。在此期间,线程无法执行其他任务。
非阻塞IO:即使数据没有就绪,也不会阻塞进程,而是立即返回一个错误码,一般在数据没有准备好时,使用轮询的方式去查询数据是否准备好。在非阻塞IO模型中,IO操作不会阻塞线程。即使数据没有准备好,调用非阻塞IO函数也会立即返回,不会让线程进入睡眠状态。这使得线程在等待IO操作完成的同时,可以执行其他任务。

同步/异步IO

同步IO和异步IO主要关注的是IO操作的结果如何通知调用者。
同步IO:同步IO操作导致请求进程被阻塞,直到IO操作完成。只有当真正完成了IO操作后,调用者才会得到结果。同步IO在进行读写操作的时候会导致线程阻塞,但是这个阻塞是可以预测和控制的。
异步IO:异步IO操作不会阻塞请求进程,而是允许进程继续执行其他操作。当IO操作完成时,会通过信号、回调等方式通知调用者。异步IO在进行读写操作的时候,调用者不会得到任何消息,也不需要等待,直到IO操作完成。

总结来说,阻塞/非阻塞关注的是线程在等待IO操作完成时的状态,而同步/异步关注的是IO操作的结果如何通知调用者。在实际应用中,需要根据具体的业务场景和需求来选择合适的IO模型。例如,对于需要高效处理大量并发连接的服务,通常会选择非阻塞或异步IO模型,以便在等待IO操作完成的同时处理其他任务。而对于一些对实时性要求不高的场景,可以选择阻塞或同步IO模型,以降低编程复杂度和提高代码的可读性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值