阻塞IO与非阻塞IO、同步IO与异步IO、多路复用IO

阻塞IO:阻塞 I/O 是指在进行 I/O 操作时,如果数据没有准备好或无法立即读取/写入,程序会被阻塞(阻塞调用)等待数据准备好或操作完成,然后才能继续执行后续的操作。阻塞 I/O 是一种同步方式的 I/O 操作。

非阻塞IO:是指在进行 I/O 操作时,如果数据没有准备好或无法立即读取/写入,程序会立即返回,并继续执行后续的操作。在非阻塞 I/O 中,程序不会等待 I/O 操作的完成,而是立即返回,可以继续执行其他任务,然后通过轮询或选择函数(如 select、poll、epoll 等)来检查是否有 I/O 可用。非阻塞 I/O 是一种异步方式的 I/O 操作。

同步IO:它是指程序在进行 I/O 操作时,必须等待 I/O 完成后才能继续执行后续的操作。在同步 I/O 中,程序会通过系统调用发起 I/O 请求,然后会一直等待 I/O 操作完成,期间程序会被阻塞,无法进行其他的计算任务。同步 I/O 保证了数据的有序性和可靠性,但也可能导致程序的执行效率较低。

异步 I/O : 是一种非阻塞的 I/O 操作方式,是指程序发起 I/O 请求后进行 I/O 操作时,不需要等待 I/O 操作的完成,会继续执行其他任务,而不会被阻塞。当 I/O 操作完成后,系统会通知程序,程序再去获取或处理完成的 I/O 结果。异步 I/O 可以提高程序的并发性和响应性能,但需要合适的编程模型和机制来处理异步事件的回调。

异步IO的实现方式:

  1. callback 回调函数:通过注册回调函数,在异步 I/O 操作完成时由操作系统或库调用该函数处理结果。在发起异步 I/O 操作时,需要提供回调函数的指针,在 I/O 完成后,系统会调用该回调函数进行处理。这种方式需要注意处理回调函数中的竞态条件和资源管理。

  2. 信号(signal):通过使用信号机制,在异步 I/O 操作完成时由操作系统发送相应的信号给进程,进程通过信号处理函数来处理 I/O 完成的事件。使用信号可以实现简单的异步通知,但需要在信号处理函数中进行合适的同步和数据处理。

  3. 非阻塞 I/O(non-blocking I/O):通过设置文件描述符为非阻塞模式,并使用轮询或选择函数(如select、poll、epoll等)来检查是否有 I/O 可用。可以通过非阻塞调用来发起 I/O 操作,然后使用轮询或选择函数来等待 I/O 完成,一旦有 I/O 完成的事件,就可以进行相应的处理。

  4. 多线程:通过在不同的线程中执行 I/O 操作和其他任务,实现异步 I/O。可以使用线程库(如pthread库)创建多个线程,在一个线程中执行 I/O 操作,而其他线程继续执行其他任务。通过线程间的通信机制来进行数据交换和结果处理。

 多路复用IO:

多路复用函数

   

                                                            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值