Linux 网络IO: 同步、异步、阻塞与非阻塞

对于Linux,当前主流的网络I/O还是同步I/O,对于处理高并发,采用的方案就是I/O复用,多线程,多进程。具体选择要根据业务场景的特点来选择。

同步、异步阻塞、非阻塞针对的是两个不同的维度:

  • 同步的关键是有序,强调的有序的任务序列,下一步操作依赖这一步。
  • 异步的关键是处理调用的对象在处理完成后主动通知,可通过回调,通知,状态变更等,依赖具体的实现机制。这里的机制很关键,CPU调度的最小单位是线程,有栈和寄存器才能完成调用。回调函数的执行线程,采用通知的话,原来调用者也需要有专门的消息处理线程,内核实现还是库实现,都是不同的机制。
  • 阻塞的关键是线程挂起,线程调用的函数不返回被操作系统挂起,常阻塞到等数据。
  • 非阻塞的关键是调用立刻返回,有数据就返回ok,没数据就不ok;非阻塞要么伴随着调用者轮询,要么有被调者的异步通知,才可能完成功能。

推荐两本经典书籍:

Linux下的五种I/O模型

  1. 阻塞I/O (blocking I/O)
  2. 非阻塞I/O (nonblocking I/O)
  3. I/O多路复用(epoll) (I/O multiplexing)
  4. 信号驱动I/O (signal driven I/O (SIGIO))
  5. 异步I/O (asynchronous I/O (the POSIX aio_functions))

前四种都是同步,只有最后一种才是异步IO。

参考:

怎样理解阻塞非阻塞与同步异步的区别?
IO 多路复用是什么意思?
Linux 开发,使用多线程还是用 IO 复用 select/epoll?
linux AIO (异步IO) 那点事儿
浅析Linux Native AIO的实现
Linux kernel AIO这个奇葩
linux下epoll如何实现高效处理百万句柄的
epoll详解
epoll 或者 kqueue 的原理是什么?
socket阻塞与非阻塞,同步与异步、I/O模型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值